2011-09-07 82 views
1

我看到這個代碼在forumPHP:你可以把一個DateTime對象放在while循環中嗎?

$begin = new DateTime($start_date); 
    $end = new DateTime(date("Y-m-d",strtotime("+1 day", strtotime($end_date)))); 
    while($begin < $end) { 
     $period[] = $begin->format('Y-m-d'); 
     $begin->modify('+1 day'); 
    } 

我想要做什麼的任擇議定書問即創建1天的日期間隔不使用DateInterval類,因爲我沒有使用PHP 5.3(我使用5.2)

然而,當我嘗試使用$時期陣列我得到一個錯誤:

未定義的變量:週期

這是我的代碼:

$start = new DateTime("09-09-2011"); 
    $end = new DateTime("24-09-2011"); 

     while($start < $end) { 

     $period[] = $start->format('Y-m-d'); 
     $start->modify('+1 day'); 

     } 

print_r($period) //error - undefined variable 

爲什麼它不工作 - 是做把DateTime對象在while循環?

回答

1

這樣定義它很容易

$period = array(); 

但是,這絕不會去那個while循環=這個代碼是沒有用的

+0

是的 - 這實際上是正確的答案 - 但上面的代碼工作正常,只是我的開始日期和結束日期在實際代碼中是相同的,但我修改了上面的帖子。 – Ash

+0

@Ash:是的,這個答案解決了 – genesis

1

$period在您while()循環定義。如果循環從不運行(即,如果$start < $end從不計算到true),則從不定義該變量。

您可以通過while()循環之前明確定義變量糾正這一點,

$period = array(); 
while($start < $end) { 
    ... 
+0

正確的問題。 - 我的開始和結束日期都是一樣的 – Ash

0

你不能比較datetime對象直接除非你使用PHP 5.2.2或更高版本。如果你使用的是舊版本,那麼你的while條件永遠不會評估爲真,並且你的循環永遠不會運行。因此,您的週期數組永遠不會被創建。

您可能需要從日期時間對象中提取日期的值,並以其他方式進行比較。

如果失敗了,您可以升級到較新版本的PHP。

+0

上面的代碼工作 - 你可以用這種方式比較日期時間對象。 – Ash

+0

從文檔:從PHP 5.2.2開始,可以使用比較運算符來比較DateTime對象。換句話說,在5.2.2之前,你不能。 – GordonM

+0

好的 - 我在5.2.6上 - 唷! – Ash

相關問題