我有一個計算兩個日期之間的天差的函數:PHP mktime地獄
function daysBetweenDates($startDate, $endDate) {
list($year1, $month1, $day1) = explode('-', $startDate);
list($year2, $month2, $day2) = explode('-', $endDate);
$f = mktime(0, 0, 0, $month2, $day2, $year2);
$i = mktime(0, 0, 0, $month1, $day1, $year1);
$difference = $f - $i;
$days = floor($difference/86400);
return $days;
}
的問題是,這種代碼也越來越有一些怪異的日期結果。例如,如果$startDate = '2014-10-14'
和$endDate = '2014-10-28'
,這個函數的輸出無處不在14
,但我得到13
。
我檢查了一些在線PHP解釋器和一些該死的原因,我不知道爲什麼,我的mktime
正在返回我不同的值。
實施例:
上3v4l.org
上3v4l.org
運行mktime(0, 0, 0, 10, 14, 2014)
返回1413237600
爲PHP versions 5.1.0 - 5.5.8
功能的具有這些值的輸出是14
運行mktime(0, 0, 0, 10, 28, 2014)
返回1414450800
爲PHP versions 5.1.0 - 5.5.8
。
在我的代碼中,當我在mktime
上運行相同的值時,我分別得到1414461600
和1413255600
。運行此代碼的函數的輸出是13
。
而我正在運行PHP 5.3.3
。
任何幫助瞭解我的環境/ php配置/功能錯誤/錯誤代碼的錯誤將不勝感激。
在您的php.ini文件中定義的默認時區設置中,您的日期之間是否存在夏時制轉換? –
這兩個時間戳之間的差異是13天23小時。所以必須有DST變化。 – Barmar
嘗試使用'round()'而不是'floor()'。 – Barmar