Ошибка при вычислении разницы в дате с классом DateTime - PullRequest
2 голосов
/ 08 марта 2011

Я пытаюсь использовать класс DateTime (php> = 5.3) для вычисления разницы с датой 2.

Пример из руководства прост и понятен, я попробовал этот пример и работал хорошо.Но если изменить дату начала и окончания, возникает проблема:

        $this->start_date = '2011-03-01';
        $this->end_date = '2011-03-31';

        var_dump($this->start_date, $this->end_date);

        $datetime1 = new DateTime($this->start_date);
        $datetime2 = new DateTime($this->end_date);

        $interval = $datetime2->diff($datetime1);

        echo $interval->format('%a total days')."\n";
        echo $interval->format('%m month, %d days');

Вывод:

30 total days     //ok
1 month, 2 days   //no! i think it should be 0 month, 30 days

С маршем не очень хорошо работает!:)

1 Ответ

1 голос
/ 08 марта 2011

Разве там не 28 дней в феврале? По тем или иным причинам это может быть выбор февраля для «месячной» единицы. Документация PHP для метода, кажется, предполагает, что такого рода вещи могут легко иметь место. Сказать «x месяцев» в любом случае не слишком полезно, поскольку месяц не является фиксированной единицей, это может быть 28, 29, 30 или 31 день.

Извлечение из документации формата даты и времени ниже.

Метод DateInterval :: format () делает не пересчитать перенос баллов в строки времени ни в сегментах даты. Это ожидается, потому что это не возможно переполнение значений типа "32 дней ", которые можно интерпретировать как что-нибудь от "1 месяца и 4 дня" до «1 месяц и 1 день».

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