Странный выпуск PHP 5.3 с расчетом разницы дат в днях

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

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

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

 $daysBefore = $diff->days; 

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

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

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

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

4 дня, а пару месяцев …

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

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