DateTime :: Diff應計算適當的時間間隔並考慮夏令時(DST)和閏年。雖然顯然不是這樣。恐怖編號:PHP的日期時間::差異得到它錯誤?
$d1 = new DateTime("2011-10-30 01:05:00", new DateTimeZone("Europe/Stockholm"));
$d2 = new DateTime("2011-10-30 03:05:00", new DateTimeZone("Europe/Stockholm"));
echo $d1->getOffset()/(60 * 60);
打印'2'!請記住,UTC時間= 1小時 - 2小時= 23:05:00前一天。
echo $d2->getOffset()/(60 * 60);
打印'1'。 DST發生了。 UTC時間= 3h - 1h = 02:05:00。
$di = $d1->diff($d2);
echo "Hours of DateInterval: " . $di->h;
打印'2'!錯誤?
$hoursofdiff = ($d2->getTimeStamp() - $d1->getTimeStamp())/60/60;
echo "Calculated difference in hours: $hoursofdiff";
打印'3'!正確?
當時鍾在給定日期轉到03:00:00時,所有瑞典人都將時鐘倒退一小時到02:00:00。這意味着在01:05至03:05之間傳遞的總時間爲三個小時,這與使用UNIX TimeStamp時手動計算的回顯相似。就像我們使用模擬時鐘時我們的手指計算一樣。更重要的是,當我們計算兩個UTC時間戳之間的差異時,我使用了PHP自己的偏移量邏輯(!)。
是PHP還是讓我的大腦停止正常工作?來自你們任何人的譴責,這個網站上存在的所有神靈都會讓我如此開心!
我在Apache服務器上使用PHP 5.4(VC9)。不幸的是我使用Windows 7 x64作爲操作系統。我已經測試了我的設置,針對PHP日期/時間類中的所有錯誤聲明(有幾個與Windows相關),並且可以確認我的系統沒有它們。除了上述代碼,我還沒有發現任何其他錯誤。我幾乎驗證了所有的代碼,並輸出了「PHP架構的日期和時間編程指南」所提供的書。因此,我必須得出結論,它必須是我的大腦女巫默認,但我想我會先在這裏拍攝。
同上5.3.6在OS X和5.3.9在Ubuntu – Phil 2012-03-14 05:31:43
同樣效果'的DateTime ::子()'和'日期時間:: add()' – Phil 2012-03-14 05:46:11