我在做的是:
echo date('H:i:s', abs(strtotime("10:50:00 - 08:50:00")));
我得到的是:
03:00:00
时区设置不起作用。 不同的服务器/机器的行为相同。 10-8必须等于2而不是3。 我知道简单的解决方案是-3600。但我希望它能够在没有修补错误的情况下工作。
答案 0 :(得分:2)
问题是,strtotime
无法计算差异。它试图解析绝对日期。结果是false
。 abs(false) === 0
。然后你就离开了
date('H:i:s', 0);
如果您的时区设置为GMT-0300,则date()
会尝试代表1970-01-01T03:00:00。
答案 1 :(得分:2)
使用DateTime objects和DateInterval
$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"));