日期之间的差异
问题描述:
我想计算两次之间的差异,其中一次是当前时间,另一次是格式HH:MM,总是在将来。日期之间的差异
如果我只是从$现在减去$ futuretime,它当然应该是一个正数。
这工作得很好,直到......
如果$现在是在下午或晚上,$ futuretime就是讲,上午07点第二天早上,我怎么能强迫它了解的时间总是将是在将来?
(它是工作的是在工作时间发生大约每半小时的东西的时候,然后停止,直到第二天早晨)提前
谢谢!
答
如果你在PHP 5.3+,使用PHP的DateTime
:
$d1 = new DateTime('14:52:10');
$d2 = new DateTime('12:12:10');
$diff = $d1->diff($d2);
var_dump($diff);
答
如果是负值,只需添加一整天。假设$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在评论中指出的那样,如果您关心DST的变化,这不是一个好的解决方案。查看他的解决方案以获得更好的方法
答
你可以简单的两个日期转换为时间戳,做计算,将其转换为所需的格式,即天,小时和分钟。这很简单。
'$ diff + = 24 * 3600;'这不考虑夏令时。例如。今天早上时钟从02:00(CET)跳到03:00(CEST)。 – VolkerK 2010-03-28 18:19:17
@Tamás在计算时间和日期偏移时,绝对不能使用自制解决方案 - 闰年,夏时制和其他复杂的日历不一致都可以通过内部PHP函数很好地满足。 – Andy 2010-03-28 18:23:19
@实际上,如果你使用PHP 5.3+,你的解决方案会更好。当我意识到这一点时,我考虑删除我的答案,但是我认为如果我将它与您的更正一起保存,那么其他人就会明白为什么这不是一个好方法。 +1解决方案。 – 2010-03-28 18:54:22