【问题标题】:Behavior of <?php echo date("H:i:s", 0);?><?php echo date("H:i:s", 0);?> 的行为
【发布时间】:2010-12-07 17:22:06
【问题描述】:

我用过:

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

在两个日期之间构建一个时间。在我的脑海中是
$var_time_diff = 36000 = display 10:00:00 for 10 hours

但事实上

<?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 是 5 小时,但如果我们这样显示日期:

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

它将是"06:00:00"

所以我的 php 配置有问题还是 php 函数日期的正常行为?

【问题讨论】:

    标签: php date datediff


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您所在的时区不是 UTC。试试:

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

      【讨论】:

        【解决方案3】:

        我不知道为什么,但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 也是如此,所以效果被否定了。

        【讨论】:

          【解决方案4】:

          使用 mktime,一小时至少为 1 @ $diff

          【讨论】:

            猜你喜欢
            • 2019-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多