Преобразование объекта DateInterval в секундах в php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
Как преобразовать вышеуказанные $interval
в секунды в php
Ответы
Ответ 1
Для этого существует функция format
. Но он не вернет количество секунд. Чтобы получить количество секунд, вы используете эту технику
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
Если вы действительно хотите использовать $interval
, вам нужно его вычислить.
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
Здесь
-
86400
- количество секунд в день
-
3600
- количество секунд в час
-
60
- количество секунд в минуту
Ответ 2
Другой способ получить количество секунд в интервале - это добавить его к нулевой дате и получить отметку времени этой даты:
$seconds = date_create('@0')->add($interval)->getTimestamp();
Этот метод будет обрабатывать интервалы, созданные с помощью конструктора DateInterval более или менее правильно, тогда как shiplu answer будет игнорировать годы, месяцы и дни для таких интервалов. Однако ответ shiplu более точен для интервалов, которые были созданы путем вычитания двух дат. Для интервалов, состоящих только из часов, минут и секунд, оба метода получат правильный ответ.
Ответ 3
Я бы добавил только ответ shiplu:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
Для обработки отрицательных интервалов.
Обратите внимание, что - вопреки Brilliand answer - В приведенном выше коде будут рассмотрены правильные годы, месяцы и даты. Потому что $interval- > days является абсолютным значением ($ interval- > d относительно месяца).
EDIT: эта функция все еще не правильная, как указано @Brilliand. Контрпример:
new DateInterval('P4M3DT2H');
Он отлично справляется с месяцами.