español - Convertir objeto DateInterval a segundos en php
php timestamp to seconds (3)
$datetime1 = date_create(''2009-10-11'');
$datetime2 = date_create(''2009-10-13'');
$interval = date_diff($datetime1, $datetime2);
¿Cómo puedo convertir el $interval
encima de segundos en PHP
Hay un format
función para esto. Pero no devolverá el número de segundos. Para obtener el número de segundos utilizas esta técnica.
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
Si realmente quieres usar $interval
, necesitas calcularlo.
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
aquí
-
86400
es el número de segundos en un día -
3600
es el número de segundos en una hora. -
60
es el número de segundos en un minuto
Otra forma de obtener el número de segundos en un intervalo es agregarlo a la fecha cero y obtener la marca de tiempo de esa fecha:
$seconds = date_create(''@0'')->add($interval)->getTimestamp();
Este método manejará los intervalos creados a través del Contructor DateInterval más o menos correctamente, mientras que la respuesta de shiplu ignorará años, meses y días para dichos intervalos. Sin embargo, la respuesta de shiplu es más precisa para los intervalos que se crearon al restar dos fechas. Para intervalos que consisten solo de horas, minutos y segundos, ambos métodos obtendrán la respuesta correcta.
Solo añadiría a la respuesta de shiplu:
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
Para manejar los intervalos negativos.
Tenga en cuenta que, contrariamente a la respuesta de Brilliand, el código anterior considerará correctamente años, meses y fechas. Porque $ interval-> days es un valor absoluto ($ interval-> d es relativo al mes).
EDITAR: esta función aún no es correcta , como lo señaló @Brilliand. Un contra-ejemplo es
new DateInterval(''P4M3DT2H'');
No se maneja bien los meses.