2013-11-01 129 views
2

我在php中使用strtotime遇到了麻煩。將strtotime轉換爲日期字符串時的錯誤日期時間值

$j = "2013-10-27"; 
for ($x = 0; $x < 100; $x++) { 
    $j = date('Y-m-d', strtotime($j) + 86400); 
    echo ' '.$j.' <br/>'; 
} 

由於代碼是自我解釋的,它會將一天添加到$ j然後顯示給瀏覽器。 但是當$ j =「2013-10-27」時,它僅打印一個結果(「2013-10-27」)。如果我將$ j更改爲另一個日期,這確實有效,但在此日期(以及其他某個日期)也是如此。

我寫過其他代碼來完成這項工作。 但有人知道它爲什麼失敗,或者我的代碼是錯誤的?

謝謝。

+0

出一個結果100 times.where你的代碼,你使用$我? –

+0

無法重現 - http://codepad.viper-7.com/8wAdrh – Phil

+0

可能重複[在PHP中添加日期到$日期](http://stackoverflow.com/questions/3727615/adding-days-to-date -in-php) –

回答

4

這是因爲你在日光節約時間的時區,並在凌晨1點在10月27日的時間恢復到午夜,使其成爲25小時工作制。

這可以通過設置時區被複制:

<?php 
date_default_timezone_set('Europe/London'); 
$j = "2013-10-27"; 
for ($x = 0; $x < 100; $x++) { 
    $j = date('Y-m-d', strtotime($j) + 86400); 
    echo ' '.$j.' <br/>'; 
} 

http://codepad.viper-7.com/uTbNWf

+0

好的偵探工作! – Phil

3

strtotime在我看來有too many limitations。使用更近DateTime lib中,而不是

$j = new DateTime('2013-10-27'); 
$interval = new DateInterval('P1D'); 
for ($x = 0; $x < 100; $x++) { 
    $j->add($interval); 
    echo $j->format('Y-m-d'), '<br>'; 
} 
+0

因此,這需要照顧[保羅的答案]中提到的DST開關(http://stackoverflow.com/a/19721032/283366) – Phil

相關問題