PHP strtotime计算移动了1小时

时间:2014-12-22 10:18:35

标签: php time

我在做的是:

echo date('H:i:s', abs(strtotime("10:50:00 - 08:50:00")));

我得到的是:

03:00:00

时区设置不起作用。 不同的服务器/机器的行为相同。 10-8必须等于2而不是3。 我知道简单的解决方案是-3600。但我希望它能够在没有修补错误的情况下工作。

3 个答案:

答案 0 :(得分:2)

问题是,strtotime无法计算差异。它试图解析绝对日期。结果是falseabs(false) === 0。然后你就离开了

date('H:i:s', 0);

如果您的时区设置为GMT-0300,则date()会尝试代表1970-01-01T03:00:00。

答案 1 :(得分:2)

使用DateTime objectsDateInterval

$d1 = new DateTime("10:50:00");
$d2 = new DateTime("08:50:00");
$diff = $d1->diff($d2);
echo $diff->format('%H:%I:%S');

答案 2 :(得分:1)

strtotime将时间转换为Unix时间戳,基本上是自1970年以来的秒数,这是一个整数。

因此,您可以转换两次并进行简单的减法,然后使用日期转换回来。

echo date('H:i:s', strtotime("10:50:00") - strtotime("08:50:00"));