2011-09-17 51 views
-4

一旦精确的24小时过去了,我将如何返回true的布尔表达式?比较PHP中的时间戳

我使用strtotime()来了就把这两个时间:

$time1 = 1316268919; 
$time2 = 1316268898; 
+1

http://stackoverflow.com/search?q = compare + times + php – Fabio

+1

答案取决于您是否想知道该时区的24小时绝对时间或24小时,例如'strtotime('2011-10-30 02:00:00') - strtotime('2011-10-29 02:00:00');'在欧洲/柏林将由于当天的DST切换90000秒。请注意'strtotime'虽然是DST意识到的,所以'echo strtotime('2011-10-30 02:00:00') - strtotime('2011-10-29 02:00:00 +24 hours');'是0. – Gordon

回答

1

这应该做你需要的东西:

if (($time1-$time2) == 86400) { 
    // Exactly 24 hours have passed. 
} 
+0

有效的评论。但问题一年只会出现两次;)(嗯,关于DST的评论消失了,但部分正确) – jancha

+0

这是所有情况下的正确答案。在计算中不需要考虑DST。注意问题是“24小时”,而不是“昨天同一时间”。因此,如果在DST边界上,则会说凌晨12点(午夜)是凌晨1点24小时。这是两次24小时过后的正确答案。 – ircmaxell

+1

这取决于使用“24小时”的准确定义。如果他们的意思是24小时精确到60分钟,那么你的代码是正确的。如果他们的意思是24小时,那么你的代码对于DST和闰秒都是不正确的。 (正确地指定你想要的代码是非常重要的,例如,人们经常说“每24小时”意味着“每天同一时间”,但它们不是同一件事。) –

0

24小时= 86400sec所以,当两个不同的是86400,这也正是24小时

注:如果适用,每年两次可能会导致DST出现问题。

0

strtotime()返回Unix纪元以来的秒数。所以为了找到时间差异,只需从另一个中减去一个。然后比较该差异与24小时内的秒数(24 * 60 * 60)。

0
abs($time1 - $time2) === 60 * 60 * 24 

的ABS是以防万一; time2可能比time1更大。

如果时间差等于60(秒在一分钟内)* 60 *(每小时分钟)* 24(小时一天)= 86400,有一个天差