結束1小時後我已經定義將該代碼作爲這樣(簡化版本爲清楚起見):PHP時間()和DST問題的端 - DST
$fifteenMinsLater = strtotime('+900 second', time());
$now = time();
if ($now > $fifteenMinsLater) {
mtrace("This should NEVER happen");
}
else {
mtrace("This should always be the case");
}
在2013年11月3日上午02點00分DST結束America/New_York並且時鐘將一小時恢復至凌晨1:00。
當我在DST結束後(即凌晨2點之後變成凌晨1點)在上午11/03/03以及上午1點到凌晨2點之間運行上述代碼時,行:
This should NEVER happen
被打印。但是,在DST轉換之前或新的2:00 AM之後的任何時間都可以。
這導致了一個主要的錯誤,導致用戶試圖訪問使用上述代碼在DST轉換後的一個小時內悲慘失敗的函數。
PHP 5.2.11。
任何想法?
你確定你沒有過於簡單? 'strtotime'&'time'返回unix時間戳,只要知道不是DST知道/不會意外倒計數3600秒。你是比較那些時間戳的表示,而不是原始整數時間戳本身? AFAIK,只有閏秒會影響unix時間戳。 – Wrikken
現在和現在的$ 15MinsLater的回聲將解決這個問題很長的路要走。 –
網站http://3v4l.org非常適合測試不同的PHP版本。只有版本[5.0.0至5.0.2](http://3v4l.org/C1UhE#v500)返回無效比較。 –