2010-03-28 141 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

你可以簡單的兩個日期轉換爲時間戳,做計算,將其轉換爲所需的格式,即天,小時和分鐘。這很簡單。