PHP Цитирование по датам

У меня есть следующий цикл while, который сравнивает 2 даты, чтобы увидеть, является ли 1 меньше другого, а если нет, то добавляется неделя к первой дате.

Он отлично работает, однако там, где существует большая разница между датами (т.е. более 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 Carbon для DateTime

благодаря

—-Редактировать—-

Что-то странное происходит, что я не понимаю. Если я передаю дату, жестко закодированную до $ startDate, все после 2013-01-06 работает отлично (и быстро), но как только после этой даты истечет время. Какие-нибудь идеи?

Похоже, вы делаете немного больше $startDate чем вы ожидаете – вы ->startOfWeek() объект с помощью ->startOfWeek() и ->endOfWeek() а не просто вычисляете вывод строки; мое чтение источника для Carbon – это то, что каждый метод, который вы вызываете, изменяет объект, поэтому назначение в последней строке вашего цикла while не нужно (его можно так же легко записать как $startDate->addDays(7); в результате ваш код немного менее эффективен, чем может быть, и может даже зацикливаться в один или два раза больше, чем вы хотите.

Тем не менее, я бы заподозрил, что этот блок кода не является вашей реальной проблемой, и что это еще дальше по вашей кодовой базе – если ваши проблемы растут с размером $ data ['weeks'], то это, вероятно, что-то в том, переработать его для вашего HTML.