-1

I'm using date('H:i:s', (time() - $start['time'])) to displa time that passed since start of the script.

whatever the result of time() - $start['time'] - be it 0, 17 or whatever the date prints out like 02:00:00, 02:00:17 etc.

What may be the reason?

4

2 回答 2

1

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

阅读UNIX 时间戳实际代表的内容。

您要查找的时差是 的结果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;
于 2012-06-04T15:32:45.127 回答
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。如果您只需要 2 次之间的差异,您可以同时使用 UTC 并且您只能获得差异,或者您可以检查当前时间偏移并减去它。

希望能帮助到你

于 2012-06-04T15:37:38.243 回答