2012-04-01 47 views
0

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

这是我的代码:

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

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

这是进入数据库的时间为:

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

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

什么可能导致此错误?先谢谢了。

+0

Offtopic:为什么不是'+1天'? '+24小时'将导致支持夏季/冬季时间的时区出现问题。 – Basti 2012-04-01 19:39:53

+0

我不认为这可能是错误。我在其他地方使用此代码,这是2分钟,一些球员得到11小时2分钟。我会尽力而为,谢谢。 – 2012-04-01 19:41:18

+0

'$ in24hourstime = $ currentTimestamp + 86400;' – kijin 2012-04-01 20:30:28

回答

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类有用,因为在我看来,它提供了内置的时间()和日期()和更简单的方法很多好处处理时区:

见:http://php.net/manual/en/book.datetime.php

+0

时区实际上是服务器的默认时区。我实际上使用了一种类似于你的方法,它似乎目前工作。如果没有,我会用你的,但你的答案! – 2012-04-01 20:52:14