2011-09-17 61 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,有一個天差