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