2010-03-28 289 views
1

我想计算两次之间的差异,其中一次是当前时间,另一次是格式HH:MM,总是在将来。日期之间的差异

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

这工作得很好,直到......

如果$现在是在下午或晚上,$ futuretime就是讲,上午07点第二天早上,我怎么能强迫它了解的时间总是将是在将来?

(它是工作的是在工作时间发生大约每半小时的东西的时候,然后停止,直到第二天早晨)提前

谢谢!

回答

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

如果是负值,只需添加一整天。假设$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的变化,这不是一个好的解决方案。查看他的解决方案以获得更好的方法

+0

'$ diff + = 24 * 3600;'这不考虑夏令时。例如。今天早上时钟从02:00(CET)跳到03:00(CEST)。 – VolkerK 2010-03-28 18:19:17

+0

@Tamás在计算时间和日期偏移时,绝对不能使用自制解决方案 - 闰年,夏时制和其他复杂的日历不一致都可以通过内部PHP函数很好地满足。 – Andy 2010-03-28 18:23:19

+0

@实际上,如果你使用PHP 5.3+,你的解决方案会更好。当我意识到这一点时,我考虑删除我的答案,但是我认为如果我将它与您的更正一起保存,那么其他人就会明白为什么这不是一个好方法。 +1解决方案。 – 2010-03-28 18:54:22

0

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