PHP дата возвращает неправильное значение дня - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю новый период даты в виде массива.Я перебираю даты и пытаюсь получить значение Day в виде строки

<?php
$period = new DatePeriod(
      new DateTime('27-02-2019'),
      new DateInterval('P1D'),
      new DateTime('03-03-2019')
    );

    foreach( $period as $date) { $array[] = $date->format('d-m-y');
      $newDate = $date->format('d/m/Y'); // for example
      echo "The date is " .$newDate." ";
      $timestamp = strtotime($newDate);
      $day = date('l', $timestamp);
      echo "The day is ".$day." \n"; ?>
      <br>
    <?}?>

. В моем эхо я получаю правильную дату, но она дает неправильный день.

Есть идеи, почему он так себя ведет?Это то, что он возвращает enter image description here

1 Ответ

0 голосов
/ 27 февраля 2019

Комбинируя DateTime() с strtotime(), вы открыли себя для общей ошибки при работе с датами.При попытке конвертировать дату в формате дд / мм / гггг предполагается, что вы используете формат даты США, который является неправильным в мм / дд / гггг.Таким образом, 28/02/2019 становится The second day of the 28th month in the year 2019, что не соответствует вашим намерениям.

Вы можете полностью избежать этого, продолжая использовать DateTime() до конца и избегая ненужных преобразований формата.Код еще меньше!

<?php
$period = new DatePeriod(
    new DateTime('27-02-2019'),
    new DateInterval('P1D'),
    new DateTime('03-03-2019')
);

foreach( $period as $date) { $array[] = $date->format('d-m-y');
    $newDate = $date->format('d/m/Y'); // for example
    echo "The date is " .$newDate." ";
    $day = $date->format('l');
    echo "The day is ".$day." \n"; ?>
    <br>
<?}?>

Вывод:

The date is 27/02/2019 The day is Wednesday
The date is 28/02/2019 The day is Thursday
The date is 01/03/2019 The day is Friday
The date is 02/03/2019 The day is Saturday
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...