PHP: Можете ли вы поместить объект DateTime в цикл while? - PullRequest
1 голос
/ 07 сентября 2011

Я видел этот код на форуме :

 $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)

Однако, когда я пытаюсь использовать массив $ period, я получаю сообщение об ошибке:

Неопределенная переменная: период

Это мой код:

    $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?

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

$period определено в вашем цикле while().Если цикл никогда не запускается (т. Е. Если $start < $end никогда не оценивается как true), переменная никогда не определяется.

Это можно исправить, явно указав переменную перед циклом while():

$period = array();
while($start < $end) {
    ...
1 голос
/ 07 сентября 2011

так что определите это легко

$period = array();

однако, это никогда не пойдет на это, хотя loop = этот код не полезен

0 голосов
/ 07 сентября 2011

Вы не можете сравнивать объекты DateTime напрямую, если вы не используете PHP 5.2.2 или новее.Если вы используете более старую версию, тогда ваше условие while никогда не будет иметь значение true, и ваш цикл никогда не будет выполняться.В результате ваш массив периодов никогда не будет создан.

Возможно, вам придется извлечь значения дат из объектов datetime и сравнить их другим способом.

В противном случае вы можете перейти на более новую версию PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...