<?php echo date("H:i:s", 0);?>的行为表现

3

我使用了:

<?php 
echo date("H:i:s", $var_time_diff);
?>

构建两个日期之间的时间…在我的脑海中,它是这样的:

$var_time_diff = 36000 = 显示10:00:00,表示10小时

但实际上…

<?php echo date("H:i:s", 0);?> 

显示 01:00:00 而不是 00:00:00

所以我们有

$date_a = "18:15:04";
$date_b = "23:15:04";
$diff = strtotime($date_b) - strtotime($date_a);

目前一切正常,$diff 相差五个小时,但如果我们像这样显示日期:

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

时间将会是"06:00:00"

我的php配置有问题还是date函数的正常行为?

4个回答

5
date()函数使用当前时区。如果您想忽略配置的时区,请使用date_default_timezone_set()或使用gmdate()

2

您所在的时区不是UTC。请尝试以下操作:

<?php
date_default_timezone_set('UTC');
echo date("H:i:s",0) . "\n";

0

我不确定为什么,在你的例子中date输出当前小时,先从你的秒数生成一个时间戳,它就可以工作了。不过我会继续关注这个问题,以获得更深入的解释。

$date_a = "18:15:04";
$date_b = "23:15:04";
$diff = strtotime($date_b) - strtotime($date_a);
echo date("H:i:s", mktime(0,0,$diff));

编辑:啊,所以它会根据您当前的时区进行调整,mktime 也是如此,因此效果被抵消了。


-1

使用mktime函数,对于$diff,最小值为1小时


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接