我想計算兩次之間的差異,其中一次是當前時間,另一次是格式HH:MM,總是在將來。日期之間的差異
如果我只是從$現在減去$ futuretime,它當然應該是一個正數。
這工作得很好,直到......
如果$現在是在下午或晚上,$ futuretime就是講,上午07點第二天早上,我怎麼能強迫它瞭解的時間總是將是在將來?
(它是工作的是在工作時間發生大約每半小時的東西的時候,然後停止,直到第二天早晨)提前
謝謝!
我想計算兩次之間的差異,其中一次是當前時間,另一次是格式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