2013-10-25 106 views
0

while循環與之相比2個日期看,如果1小於另一個,如果沒有的話一個星期增加了第一次約會,我有以下循環。PHP通過日期

它工作正常,但是那裏是日期(即超過12個月),我收到了超時錯誤,因爲它已經通過了最大執行時間之間有較大的差異。

任何人都可以幫助我提高效率嗎?

 while($startDate->timestamp < $current_week->timestamp){ 
      $data['weeks'][$w] = array(
       'monday' => $startDate->startofWeek()->format('d/m/Y'), 
       'sunday' => $startDate->endofWeek()->format('d/m/Y') 
      ); 
      $w++; 
      $startDate = $startDate->addDays(7); // Move it on to the following week 
     } 

我要補充一點,我與碳API擴展的DateTime工作

感謝

---- ----編輯

奇怪的事情發生了,我不明白。如果我在2013-01-06之後將硬編碼的日期通過硬編碼到$ startDate,那麼一切正常(而且很快),但在此日期之後,它就會超時。任何想法的人?

+0

這意味着,執行你的腳本需要比是在參數或者set_time_limit設定更長(默認30秒),你可能想看看你的腳本再次使其更快,或者您可以將set_time_limit設置爲更大的值。 – redelschaap

+0

@ Ronald01990是的,我知道,我只是在不改變set_time的情況下問我如何讓循環更有效率。謝謝 – bencarter78

+0

你真的需要創建這個數組嗎? – Ashalynd

回答

0

看起來您正在對$startDate做比您期望的更多 - 您正在修改對象->startOfWeek()->endOfWeek(),而不是隻計算字符串輸出;我的源頭Carbon的解讀是,每次調用方法修改的對象,所以在while循環的最後一行的任務是不必要的(它可以很容易地被寫爲$startDate->addDays(7);。由於你的代碼是一個結果效率比它低一點,甚至可能比你想要的還要多一倍或兩倍。

不過,我會懷疑這個代碼塊不是你真正的問題,而且它更接近你的代碼庫 - 如果你的問題,成長與$數據的大小[「周」]那麼它可能是一些在你正在處理它爲你的HTML的方式。

+0

這只是我必須忍受的第二件事,然而,實際上,我需要找出在特定日期超時的原因(見上面的編輯)。你對addDays函數是正確的,但它仍然可以工作,因爲它應該不管它我通過addDays(1)或addDays(7) – bencarter78