Странная проблема PHP 5.3 с разницей в разнице в днях - PullRequest
7 голосов
/ 27 января 2012

У меня довольно странная проблема с использованием функции сравнения даты в PHP 5.3 для вычисления разницы в днях между двумя датами.Ниже приведен мой код:

$currentDate = new DateTime(); // (today's date is 2012-1-27)
$startDate = new DateTime('2012-04-01');

$diff = $startDate->diff($currentDate);

$daysBefore = $diff->d;

echo $daysBefore; 

Приведенный выше код отображает 4 в качестве значения переменной $ daysBefore.

Почему PHP отображает разницу в 4 дня между датами 27 января 2012 года и1 апреля 2012 года, когда между этими датами явно много дней.

Я что-то не так делаю?

Ответы [ 4 ]

5 голосов
/ 27 января 2012

DateInterval::$d - часть дня интервала, , а не общее количество дней разницы. Для этого вам нужно DateInterval::$days, поэтому:

$daysBefore = $diff->days;
2 голосов
/ 27 января 2012

Свойство d - это количество дней, указанное в «3 месяцах 4 дня ».Если вы хотите общее количество дней , используйте свойство days.

2 голосов
/ 27 января 2012

При создании DateInterval с помощью метода DateTime::diff он заполняет не только дни, но и часы, минуты, секунды, месяцы и даже годы в один символ свойства.Вы проверяете односимвольный d на дни, которые будут считаться днями, оставшимися за один раз, и рассчитываются месяцы.

Попробуйте посмотреть свойство days, которое фактически заполняется только при использованииdiff.

Поведение здесь крайне противоречиво.Посетите справочную страницу DateInterval::format, чтобы получить интересную информацию о том, что происходит, когда вы создаете DateInterval различными способами.

0 голосов
/ 27 января 2012

4 дня и пара месяцев ...

Используйте $diff->days для общего количества дней.

http://www.php.net/manual/en/class.dateinterval.php

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