我有一個計算的開始/結束時間,我正在嘗試執行,並且遇到問題,看看結束時間是否在開始時間之後的第二天12點之前。另外,我需要計算它在開始時間之後的多少天。計算多少'Midnights'是PHP中的另一個日期?
我有什麼:開始日期,結束日期
我需要什麼: - 有多少「午夜」是結束日期過去的開始日期?
有沒有人做過類似的事情?
我有一個計算的開始/結束時間,我正在嘗試執行,並且遇到問題,看看結束時間是否在開始時間之後的第二天12點之前。另外,我需要計算它在開始時間之後的多少天。計算多少'Midnights'是PHP中的另一個日期?
我有什麼:開始日期,結束日期
我需要什麼: - 有多少「午夜」是結束日期過去的開始日期?
有沒有人做過類似的事情?
這使用PHP 5.3,如果您有早期版本,您可能需要使用unix時間戳找出差異。假設開始和結束時間都是同一時間,那麼中午的數量應該是天數的差異。因此,將兩者都設置爲當天的午夜setTime(0,0)
應該使計算正確。
使用DateTime對象。
$start = new DateTime('2011-03-07 12:23:45');
$end = new DateTime('2011-03-08 1:23:45');
$start->setTime(0,0);
$end->setTime(0,0);
$midnights = $start->diff($end)->days;
如果不使用setTime()
調用,這將導致0,因爲那裏是起點和終點之間少於24小時。與setTime()
這導致1,因爲現在的差異正好是24小時。
diff()
函數與DateInterval類一起在5.3中引入。在5.2中,您仍然可以使用DateTime類,但必須使用Unix時間戳計算總日數。
$midnights = ($end->format('U') - $start->format('U'))/86400
你可以用,在一個abs()
功能開始/結束的順序並不重要。
注意:這些功能可能需要針對涉及DST的情況進行測試。
php date documentation中的評論在除以86400(一天中的秒數)之後使用一輪,以解決可能與DST有關的任何問題。
DateTimes的替代方法是在UTC中創建它們。
$utcTimezone = new DateTimeZone('UTC');
$start = new DateTime('2011-03-07 12:23:45', $utcTimezone);
$end = new DateTime('2011-03-08 1:23:45', $utcTimezone);
我們正在使用5.2.10,但我會研究類似的東西。謝謝! – wajiw 2011-03-07 02:42:08
唯一不能使用的就是最後一行。我用5.2替代更新答案。 – Jacob 2011-03-07 02:45:47
非常感謝您的幫助。我將在實施後更新答案 – wajiw 2011-03-07 02:49:57