2009-10-05 18:11:08¿Recibe segundos de intervalo entre dos datetime en PHP?
2009-10-05 18:07:13
Esto debería generar 235, cómo hacerlo?
2009-10-05 18:11:08¿Recibe segundos de intervalo entre dos datetime en PHP?
2009-10-05 18:07:13
Esto debería generar 235, cómo hacerlo?
Puede utilizar strtotime() de hacer eso:
$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
Nota: Asegúrese de utilizar la letra "H" mayúscula durante horas (modo 24 horas) cuando su tiempo "inferior" es "ahora" y utiliza 'fecha()' para obtener la fecha y hora de ahora ('fecha (" Ymd H: i: s ")'). –
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")
PHP referencia Fecha Hora es útil para cosas como esta: PHP Date Time Functions
strtotime() es probablemente la mejor manera.
$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
Con objetos DateTime, puede hacerlo de esta manera:
$date = new DateTime('2009-10-05 18:07:13');
$date2 = new DateTime('2009-10-05 18:11:08');
$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();
¡Esto también toma en cuenta el horario de verano! – Brainware
Esta es la solución más elegante a la pregunta. Esta debería ser la respuesta aceptada. –
Debido a limitaciones de tiempo UNIX, puede tener problemas compairing fechas antes de 1970 y después de 2038. elegir a perder precisión (= no mires el segundo) pero evita pasar a través de las conversiones de época unix (getTimestamp). Depende de lo que esté haciendo ...
En mi caso, usando 365 en su lugar (12 * 30) y "30" como longitud promedio del mes, redujo el error en una salida utilizable.
function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds
$diff = $end->diff($start);
$diff_sec = $diff->format('%r').(// prepend the sign - if negative, change it to R if you want the +, too
($diff->s)+ // seconds (no errors)
(60*($diff->i))+ // minutes (no errors)
(60*60*($diff->h))+ // hours (no errors)
(24*60*60*($diff->d))+ // days (no errors)
(30*24*60*60*($diff->m))+ // months (???)
(365*24*60*60*($diff->y)) // years (???)
);
return $diff_sec;
}
Tenga en cuenta que el error podría ser 0, si las cantidades "medias" están destinadas a diff. Los documentos PHP no habla de esto ... En un caso grave, el error podría ser:
prefiero suponer que alguien decidió considerar "m" como 30 días e "y", como 365, cargando "d" con la diferencia cuando "diff" camina a través de los meses no-30 ...
Si alguien sabe algo más sobre esto y puede proporcionar documentación oficial, ¡es bienvenido!
Use la propiedad days en lugar de la propiedad d para obtener los días exactos entre los dos días. Entonces no hay resultados inexactos allí. – Nilz11
Posible duplicado de [Calcular el total de segundos en PHP DateInterval] (http://stackoverflow.com/questions/3176609/calculate-total-seconds-in-php-dateinterval) – FactoryAidan