PHP时间 - 左错误

时间:2012-04-01 19:33:37

标签: php timezone

我在显示剩余时间方面遇到了一些问题。

这是我的代码:

echo date( "H:i:s", $show_job['deadline'] - time() );

我的服务器时区是:欧洲/阿姆斯特丹

这是进入数据库的时间:

$currentTimestamp = time();
$in24hourstime = strtotime("+24 hours", $currentTimestamp);

问题是,我的一些用户正在获得10小时而不是24小时。我的猜测是这些用户来自不同的时区。我在伦敦。

可能导致此错误的原因是什么?谢谢你提前。

1 个答案:

答案 0 :(得分:1)

首先,最好使用PHP日期函数在脚本中显式设置默认时区,如下所示:

date_default_timezone_set('Europe/London');

请参阅http://php.net/manual/en/function.date-default-timezone-set.php

这可确保所有日期计算都使用正确的内部时区。将日期显示给用户时,您可以相应地调整时区的时间。

稍微修改您的示例,现在可以在24小时内创建两个带有UNIX时间戳的变量:

$now = time();
$in24hourstime = strtotime("+24 hours", $now);  

为了计算差异,我们可以从另一个中减去一个,以便在几秒钟内给出差异:

 $remaining = $in24hourstime - $now;     

在我们的示例中,$ remaining的值是86400秒。如果该值为0或负数,我们可以假设截止日期已过。

if($remaining > 0) {

    $hours = intval(intval($remaining) / 3600); 
    $minutes = intval(($remaining / 60) % 60); 
    $seconds = intval($remaining % 60); 

    echo $hours . ' hours, '.$minutes.' minutes and '.$seconds . ' seconds remaining!';

} else {

    echo "Deadline has been met. No time remaining!";
}

顺便说一句,你可能会发现使用PHP的DateTime类很有用,因为在我看来它比内置的time()和date()提供了许多好处,并且更容易处理时区:

请参阅:http://php.net/manual/en/book.datetime.php