0
$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。

我该如何解决这个问题?

4

4 回答 4

2

小写h为您提供 12 小时格式的小时。所以零小时是在午夜 12 点之后。如果您使用大写H,它将根据需要显示。

echo date("H:i:s", $v);

您的差异实际上不是时间,而是时间跨度。

于 2013-07-16T14:36:10.830 回答
0

您回显日期的错误将其更改为echo date('H:i:s', $v);大写 H

于 2013-07-16T14:36:09.423 回答
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");
于 2013-07-16T14:37:44.130 回答
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”代表秒数。

于 2013-07-16T14:41:21.870 回答