dateinterval — Как получить количество дней из интервала дат PHP?

Я пытаюсь получить количество дней для интервала PHP. Когда я запускаю следующий фрагмент кода на http://sandbox.onlinephpfunctions.com/:

$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";

Я получил:

(unknown)Done

Что я делаю неправильно?

1

Решение

«% 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";
4

Другие решения

Проблема здесь:

$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 (), он не будет работать.
Надеюсь, поможет.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector