【发布时间】:2011-02-01 19:09:04
【问题描述】:
我想计算两个时间的差值,一个是当前时间,另一个是HH:MM格式,总是在未来。
如果我只是从 $now 中减去 $futuretime,它当然应该是一个正数。
这工作正常,直到...
如果 $now 是在下午或晚上,而 $futuretime 是,比如说,第二天早上 7 点,我如何强制它理解时间总是在未来?
(用于计算工作时间大约每半小时发生一次的事情的时间,然后停止到第二天早上)
提前致谢!
【问题讨论】:
我想计算两个时间的差值,一个是当前时间,另一个是HH:MM格式,总是在未来。
如果我只是从 $now 中减去 $futuretime,它当然应该是一个正数。
这工作正常,直到...
如果 $now 是在下午或晚上,而 $futuretime 是,比如说,第二天早上 7 点,我如何强制它理解时间总是在未来?
(用于计算工作时间大约每半小时发生一次的事情的时间,然后停止到第二天早上)
提前致谢!
【问题讨论】:
如果是负数,只需在差值上加上一整天。假设 $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)。
如果您使用的是 PHP 5.3+,请使用 PHP 的DateTime:
$d1 = new DateTime('14:52:10');
$d2 = new DateTime('12:12:10');
$diff = $d1->diff( $d2 );
var_dump( $diff );
【讨论】:
您可以简单地将两个日期转换为时间戳,进行计算并将其转换为所需的格式,即天、小时和分钟。这很简单。
【讨论】: