Php 在小时数范围内,2次之间的差异显示为12

Php 在小时数范围内,2次之间的差异显示为12,php,date,time,strtotime,Php,Date,Time,Strtotime,结果应该是00:00:03。但现在是12:00:03 如何解决此问题?您在回显您的日期时出现的错误将其更改为此回显日期('H:i:s',$v)带有大写字母H小写字母H以12小时格式显示小时。所以零点一小时是在午夜之后,也就是凌晨12点。如果您使用大写字母H,它将根据需要显示 $start_time = '10:36:23'; $end_time = '10:36:26'; $v = strtotime($end_time) - strtotime($start_time);

结果应该是00:00:03。但现在是12:00:03


如何解决此问题?

您在回显您的日期时出现的错误将其更改为此
回显日期('H:i:s',$v)带有大写字母H

小写字母H以12小时格式显示小时。所以零点一小时是在午夜之后,也就是凌晨12点。如果您使用大写字母H,它将根据需要显示

$start_time = '10:36:23';  
$end_time = '10:36:26';   

$v =  strtotime($end_time) - strtotime($start_time);  


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

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

差异计算是正确的,
$v==3
,但您随后使用
日期
将其格式化为时间

这将输出相当于
1970-01-01 00:00:03+0000
的本地时间,该时间可能因本地时区(以及可能的夏令时)而异

如果要以这种方式设置差异格式,可以使用
gmdate
(无论本地时区如何,都能正确显示)和24小时时钟:

echo date("H:i:s", $v);
您还可以使用
DateTime

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");
结果:

$start_time = new DateTime('10:36:23');  
$end_time = new DateTime('10:36:26'); 

$diff = $start_time->diff($end_time);

print_r($diff);

其中“s”代表秒数。

这解决了格式的问题,但如果
日期。时区
不是UTC,请小心-例如,对于伦敦时区,这将导致
01:00:00
(英国在1970年1月1日是UTC+1)。这是固定的。对所有的答案都有很大的疑问。
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 3
    [invert] => 0
    [days] => 0
)