Я пытаюсь получить количество дней для интервала PHP. Когда я запускаю следующий фрагмент кода на http://sandbox.onlinephpfunctions.com/:
$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";
Я получил:
(unknown)Done
Что я делаю неправильно?
«% A» будет возвращать количество дней только в том случае, если вы берете разницу во времени, в противном случае оно возвращает неизвестное значение.
Вы можете использовать «% d» для получения дней, но он также вернет 0 в случае new \ DateInterval (‘P1Y’), поскольку он не преобразует годы в дни.
Один простой способ получить количество дней — создать DateTime в нулевое время, добавить к нему интервал и затем получить полученную временную метку:
<?php
$duration = new \DateInterval('P1Y');
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($duration)->getTimeStamp();
$intervalInDays = $intervalInSeconds/86400;
echo $intervalInDays;
echo " Done";
Проблема здесь:
$duration->format('%a');
Как руководство говорит, «Общее количество дней в результате DateTime :: diff () или (неизвестно) в противном случае».
Вам нужен действительный объект dateInterval, возвращаемый DateTime
«s diff()
способ заставить параметр «а» работать с DateInterval::format()
функция:
$now = new DateTime(date('Y-m-d H:i:s'));
$duration = (new DateTime("+1 year"))->diff($now);
echo $duration->format('%a');
Похоже, если объект DateInterval не создан DateTime :: diff (), он не будет работать.
Надеюсь, поможет.