【问题标题】:Difference between dates日期之间的差异
【发布时间】:2011-02-01 19:09:04
【问题描述】:

我想计算两个时间的差值,一个是当前时间,另一个是HH:MM格式,总是在未来。

如果我只是从 $now 中减去 $futuretime,它当然应该是一个正数。

这工作正常,直到...

如果 $now 是在下午或晚上,而 $futuretime 是,比如说,第二天早上 7 点,我如何强制它理解时间总是在未来?

(用于计算工作时间大约每半小时发生一次的事情的时间,然后停止到第二天早上)

提前致谢!

【问题讨论】:

    标签: php time timestamp


    【解决方案1】:

    如果是负数,只需在差值上加上一整天。假设 $now$futuretime 是时间戳(以午夜后的秒数存储),只需执行以下操作:

    $diff = $futuretime - $now;
    if ($diff < 0)
        $diff += 24 * 3600;
    

    如果是HH:MM格式:

    list($future_hours, $future_mins) = explode(":", $futuretime);
    $futuretime = $future_hours * 60 + $future_mins;
    list($now_hours, $now_mins) = explode(":", $now);
    $now = $now_hours * 60 + $now_mins;
    $diff = $futuretime - $now;
    if ($diff < 0)
        $diff += 24 * 60;
    

    当然,后一种情况以分钟为单位返回差异,而前者以秒为单位返回差异。

    编辑:正如 Andy 在下面的 cmets 中指出的,如果您关心 DST 的变化,这不是一个好的解决方案。查看他的解决方案以获得更好的方法。

    【讨论】:

    • $diff += 24 * 3600; 这没有考虑夏令时。例如。今天早上,时钟从 02:00(CET)跳到 03:00(CEST)。
    • @Tamás 在计算时间和日期偏移时,您绝不能使用自制解决方案 - 闰年、夏令时和其他复杂的日历不一致都可以通过内部 PHP 函数得到很好的解决。
    • @Andy 确实,如果使用 PHP 5.3+,您的解决方案会更好。当我意识到这一点时,我考虑删除我的答案,但我认为最好将它与您的更正一起保留,以便其他人可以看到为什么这不是一个好方法。为您的解决方案 +1。
    【解决方案2】:

    如果您使用的是 PHP 5.3+,请使用 PHP 的DateTime

    $d1 = new DateTime('14:52:10');
    $d2 = new DateTime('12:12:10');
    
    $diff = $d1->diff( $d2 ); 
    var_dump( $diff );
    

    【讨论】:

      【解决方案3】:

      您可以简单地将两个日期转换为时间戳,进行计算并将其转换为所需的格式,即天、小时和分钟。这很简单。

      【讨论】:

        猜你喜欢
        • 2012-02-04
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2015-08-18
        • 2011-10-29
        • 2012-04-18
        相关资源
        最近更新 更多