2013-05-14 94 views
1

我得到了一個非常簡單的代碼,將需要2個日期,並循環我的數據,直到達到結束日期。爲什麼我的while循環在內部沒有回聲時不工作?

  $start = new DateTime($senddate); 
      $now = new DateTime("NOW"); 
      $end = new DateTime ($end); 


      //We check if starting date is >= now() 
      if ($start->date <= $now->date){ 
       $start = $now; 

      } 

      $i=0; 

      if ($frequency==4){ 
       while ($start->date <= $end->date) { 
        $calcdate[$i]=$start->date; 
        $start->modify('+1 month'); 
        $i++; 
        echo '<!--'; 
        print_r($start); 
        echo '-->'; 
       } 

正如你看到的那樣,循環中有一個print_r。 一切工作正常:) 但是,如果我刪除它,那麼循環永遠不會結束..我試圖添加if($i>50) exit;沒有任何成功。我不明白爲什麼這個循環在沒有pint_r的時候不起作用。

感謝您的幫助

+2

'而($啓動<= $結束)' – 2013-05-14 08:56:43

+0

你猜對了.. :) – 2013-05-14 09:00:28

+0

哼。 ..其實,並不是真的,我仍然有bug,但我發現爲什麼 – 2013-05-14 17:12:05

回答

0

從該行$calcdate[$i]=$start->date; 來到我的錯誤,似乎這給索姆意外的行爲(在這種情況下),我嘗試使用$calcdate[]=$start->format('Y-m-d H:i:s');這給了預期的效果。不知道爲什麼我的腳本沒有使用日期方法。如果有人知道..

+1

因爲DateTime對象中沒有'date'屬性? – 2013-05-14 23:17:21

1

我建議你讀一讀PHP DateTime manual,那裏有很多很好的信息可以幫助你完成你所要做的。

據我所知,您正試圖在跨越當前日期的兩個日期之間按月執行操作。使用DatePeriod類有一個更簡單的方法。

事情是這樣的: -

$start = new \DateTime('yesterday');// Just for demo purposes 
$now = new \DateTime(); //No need for "now" as it is the default 
$end = new \DateTime('+ 6 month');// again, for demo purposes 
$interval = new \DateInterval('P1M'); 

if($now >= $start){ // you can do direct comparisons on DateTime objects 
    $period = new \DatePeriod($start, $interval, $end); 
    foreach($period as $date){ 
     // Each $date is a DateTime instance that you can 
     // operate on as you see fit, I have just var_dumped it out. 
     var_dump($date); 
    } 
} 

上面的代碼可以看出這裏工作http://3v4l.org/1I30E

+0

感謝您的回答,但是,我的錯誤來自 - >日期方法/屬性,如您在評論中所述。使用格式化方法解決它 – 2013-05-15 13:00:12

相關問題