PHP的日期使用导致2小时的错误

时间:2012-06-04 15:26:10

标签: php

我正在使用date('H:i:s', (time() - $start['time']))来替换自脚本启动以来经过的时间。

无论time() - $start['time']的结果如何 - 无论是0,17还是其他任何日期都打印出来,如02:00:00,2:00:17等。

可能是什么原因?

2 个答案:

答案 0 :(得分:1)

time会返回绝对数字时间戳,例如2012-06-04 16:35:12的数值。您的开始时间是类似的数字绝对时间戳。从另一个中减去一个将导致非常小的数字,这又是一个绝对的时间戳。可能在1970年初的某个时候。当您使用date('H:i:s')格式化该时间戳时,您只显示时间戳的时间部分,如1970-01-01 02:00:00

了解UNIX timestamps actually represent

您要查找的时差是time() - $start['time']的结果,以秒为单位,您无法使用date()进行格式化。更多的是:

$diff = time() - $start['time'];
echo 'Difference in seconds: ' . $diff;
echo 'Difference in minutes: ' . $diff / 60;
echo 'Difference in hours: '   . $diff / 60 / 60;

答案 1 :(得分:0)

似乎你添加了2H偏移量。

// save current TZ
$current_tz = date_default_timezone_get();
// Use universal time
date_default_timezone_set('UTC');
$t = time();
echo "T:".$t."<br/>";
sleep(2);
echo "T2: ".date('H:i:s', time() - $t );
// return correct TZ
date_default_timezone_set($current_tz);

如果我在没有date_default_timezone_set('UTC')的情况下尝试此代码,它会从夏令时(GMT + 1)给出预期值+ 1H。如果你只需要两次之间的差异,你可以使用UTC两者,你只得到差异或者你可以检查当前的时间偏移并减去它。

希望有所帮助