我在显示剩余时间时遇到了一些问题。
这是我的代码:
echo date( "H:i:s", $show_job['deadline'] - time() );
我的服务器时区是:欧洲/阿姆斯特丹
这就是进入数据库的时间:
$currentTimestamp = time();
$in24hourstime = strtotime("+24 hours", $currentTimestamp);
问题是,例如,我的一些用户的工作时间是10小时,而不是24小时。我猜想这些用户来自不同的时区。我在伦敦。
是什么原因导致了这个错误?提前感谢。
首先,使用PHP日期函数显式设置脚本中的默认时区是个好主意,如下所示:
date_default_timezone_set('Europe/London');
请参阅http://php.net/manual/en/function.date-default-timezone-set.php
这样可以确保所有日期计算都使用正确的内部时区。当向用户显示日期时,您可以相应地将时间调整到他们的时区。
稍微修改一下您的示例,就可以创建两个带有UNIX时间戳的变量:
$now = time();
$in24hourstime = strtotime("+24 hours", $now);
为了计算差值,我们可以从另一个中减去一个,以秒为单位得出差值:
$remaining = $in24hourstime - $now;
在我们的示例中,剩余$的值为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