$start_time = '10:36:23';
$end_time = '10:36:26';
$v = strtotime($end_time) - strtotime($start_time);
echo date("h:i:s", $v);
结果应为00:00:03。但是显示在12:00:03。
我该如何解决这个问题?
答案 0 :(得分:2)
小写 h 以12小时格式为您提供小时。所以零小时是在午夜12点之后。如果您使用大写 H ,它将根据您的需要显示。
echo date("H:i:s", $v);
你的差异实际上不是时间,而是时间跨度。
答案 1 :(得分:0)
您回显日期的错误会将其更改为此echo date('H:i:s', $v);
,大写为H
答案 2 :(得分:0)
差异计算是正确的,$v == 3
,但您正在使用date
将其格式化为时间。
这将输出相当于1970-01-01 00:00:03 +0000
的当地时间,该时间可能因当地时区(以及夏令时)而异。
如果您希望以这种方式格式化差异,可以使用gmdate
(无论当地时区如何正确显示)和24小时制:
echo gmdate("H:i:s", $v);
您也可以使用DateTime
:
$start_time = new DateTime('10:36:23', new DateTimeZone('UTC'));
$end_time = new DateTime('10:36:26', new DateTimeZone('UTC'));
$diff = $end_time->diff($start_time);
echo $diff->format("%H:%I:%S");
答案 3 :(得分:0)
这只是一个提示。
您还可以使用datetime对象计算两个日期之间的差异:
$start_time = new DateTime('10:36:23');
$end_time = new DateTime('10:36:26');
$diff = $start_time->diff($end_time);
print_r($diff);
结果:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 0
[h] => 0
[i] => 0
[s] => 3
[invert] => 0
[days] => 0
)
's'代表秒数。