2009-10-05 12 views

Respuesta

55

Puede utilizar strtotime() de hacer eso:

$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13') 
+0

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 ")'). –

2
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13") 
7

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') 
107

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(); 
+0

¡Esto también toma en cuenta el horario de verano! – Brainware

+0

Esta es la solución más elegante a la pregunta. Esta debería ser la respuesta aceptada. –

4

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:

  • 0 segundos si diff se aplica a intervalos de tiempo < 1 mes
  • 0 a 3 días si es dif aplicado a intervalos de tiempo> 1 mes
  • 0 a 14 días si diff se aplica a intervalos de tiempo> 1 año

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!

+0

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

Cuestiones relacionadas