PHP DateTime записывает значение во время цикла WHILE - PullRequest
0 голосов
/ 08 ноября 2019

Это, вероятно, что-то ДЕЙСТВИТЕЛЬНО простое, но это делает мою голову!

Я не кодер - так что это сложено воедино из того, что я узнал - это говорит о том, что все работает как есть, кроме одногостранная проблема ....

Я заполняю массив для экспорта в JSON, но добавляю все даты, отсутствующие в запросе SQL.

ВСЕ работает, КРОМЕ переменной datetime в2-ой цикл «WHILE»!?!?

Цикл работает как положено - он повторяет правильное количество раз и добавляет правильную строку в массив ....

            while ($nt = $result->fetch_assoc())
            {
                $temp = array();
                $day = new DateTime();
                $day->setTimestamp(strtotime($nt['day']));
                $day->format('U = d/m/Y');
                if ($day < $firstdate) {
                    $firstdate = $day;
                }
                // WHILE LOOP INCREMENTS CORRECTLY... so $firstdate is incrementing....
                while ($day > $firstdate) {
                    // THIS LINE DOESNT SHOW THE INCREMENTED DATE?
                    $temp[] = array('v' => $firstdate->format('d/m/y'), 'f' =>NULL);
                    $temp[] = array('v' => intval(0), 'f' =>NULL);
                    $rows[] = array('c' => $temp);
                    $firstdate->add(new DateInterval('P1D'));
                }
                // THIS LINE DISPLAYS IT CORRECTLY!
                $temp[] = array('v' => $firstdate->format('d/m/y'), 'f' =>NULL);
                $temp[] = array('v' => intval($nt['output']), 'f' =>NULL);
                $rows[] = array('c' => $temp);
                $firstdate->add(new DateInterval('P1D'));
            }

Вывод, который я получаю из вышеприведенного, выглядит примерно так (см. Рис. В конце для реальных результатов!):

Что я получаю ---> 26/10/19 27 ------>Правильно

Что я получаю ---> 27/10/19 0 ------> Правильно

Что я получаю ---> 27/10/19 0 ------> Ожидается "28/10/19 0"

Что я получу ---> 27/10/19 0 ------> Ожидаем "29/10/19 0"

Что я получаю ---> 30/10/19 25 ------> Правильно

Что я получаю --> 31/10/19 0 ------> Правильно

Что я получу ---> 01/11/19 45 ------> Правильно

Итак«$ firstdate» инкрементно увеличивается, но когда я записываю его в массив, оно все еще имеет старое значение? Но только в цикле while? !!?

Все это выгружается в JSON и читается в Google Charts - где отображается enter image description here

1 Ответ

1 голос
/ 09 ноября 2019

Ладно - обнаружил проблему - просто нужно больше кофе и посмотреть на него свежим в 6 часов утра! Внутренний всегда имел старые значения!

                 while ($nt = $result->fetch_assoc()) {

                    //$temp = array();          <-----  DOH!
                    $day = new DateTime();
                    $day->setTimestamp(strtotime($nt['day']));
                    $day->format('d/m/y');
                    if ($day < $firstdate) {
                        $firstdate = $day;
                    }

                    while ($firstdate < $day) {
                        $temp = array();         // Needed to be here!
                        $temp[] = array('v' => $firstdate->format('d/m/y'), 'f' =>NULL);
                        $temp[] = array('v' => intval(0), 'f' =>NULL);
                        $rows[] = array('c' => $temp);
                        $firstdate->add(new DateInterval('P1D'));

                    }

                    $temp = array();       // Needed to be here as well!
                    $temp[] = array('v' => $firstdate->format('d/m/y'), 'f' =>NULL);
                    $temp[] = array('v' => intval($nt['output']), 'f' =>NULL);
                    $rows[] = array('c' => $temp);
                    $firstdate->add(new DateInterval('P1D'));
                }

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