我正在使用date('H:i:s', (time() - $start['time']))
来替换自脚本启动以来经过的时间。
无论time() - $start['time']
的结果如何 - 无论是0,17还是其他任何日期都打印出来,如02:00:00,2:00:17等。
可能是什么原因?
答案 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两者,你只得到差异或者你可以检查当前的时间偏移并减去它。
希望有所帮助