Странная проблема PHP 5.3 с разницей дат, вычисляющей разницу в днях

У меня возникла довольно странная проблема с использованием функции diff в 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 года, когда между этими датами явно больше дней.

Я делаю что-то неправильно?


person Bug Magnet    schedule 27.01.2012    source источник


Ответы (4)


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

$daysBefore = $diff->days;
person FtDRbwLXw6    schedule 27.01.2012

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

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

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

person Charles    schedule 27.01.2012

Свойство d – это количество дней, например "3 месяца, 4 дня". Если вам нужно общее количество дней, используйте свойство days.

person deceze♦    schedule 27.01.2012

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

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

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

person Brad    schedule 27.01.2012