2010-09-21 14 views
23

Tengo dos fechas, formateadas como "Y-m-d H: i: s". Necesito comparar estas dos fechas y descubrir la diferencia horaria.¿Cómo encuentro la diferencia horaria entre dos fechas en PHP?

+3

¿Has probado algo? Por ejemplo, podría convertirlos en sellos de tiempo de Unix (segundos) usando 'strtotime', luego restarlos, luego dividir por 3600 para obtener horas – Fanis

+0

Sí, estaba dividiendo por 24 en lugar de 3600. ¡doh! – mike

Respuesta

48

Puede convertirlos a marcas de tiempo e ir de allí:

$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1); 

Dividiendo por 3600 porque hay 3.600 segundos en una hora y utilizando round() para evitar tener una gran cantidad de cifras decimales.

+0

gracias, eso es lo que estaba intentando, pero estaba tratando de dividir por 24. – mike

+3

Usar 'strtotime()' no es ** la mejor manera ** de administrar las fechas. Considere usar '\ DateTime :: createFromFormat ($ date, 'Y-m-d H: i: s') -> diff ($ dto2)' o una funcionalidad similar para trabajar con fechas (_ + sabemos el formato que esperamos analizar_). Es casi 2015 afuera, ¡hagamos las cosas de la manera más elegante! –

+1

excepto que createFromFormat toma $ formato como el primer parámetro;) '\ DateTime :: createFromFormat ('Y-m-d H: i: s', $ fecha) -> diff ($ dto2)' – Asmodiel

4
$seconds = strtotime($date2) - strtotime($date1); 
$hours = $seconds/60/60; 
0

Puede utilizar strtotime() para analizar sus secuencias y hacer la diferencia entre los dos de ellos.


Recursos:

+2

Muestra un código. –

0

El problema es que el uso de estos valores, el resultado es 167 y debe ser 168:

$date1 = "2014-03-07 05:49:23"; 
$date2 = "2014-03-14 05:49:23"; 
$seconds = strtotime($date2) - strtotime($date1); 
$hours = $seconds/60/60; 
4

Como además de ans aceptado ¡Me gustaría recordar que \DateTime::diff está disponible!

$f = 'Y-m-d H:i:s'; 
$d1 = \DateTime::createFromFormat($date1, $f); 
$d2 = \DateTime::createFromFormat($date2, $f); 

/** 
* @var \DateInterval $diff 
*/ 
$diff = $d2->diff($d1); 
$hours = $diff->h + ($diff->days * 24); // + ($diff->m > 30 ? 1 : 0) to be more precise 

\DateInterval documentación.

9

Puede utilizar la interfaz DateTime también -

$d1= new DateTime("06-08-2015 01:33:26pm"); 
$d2= new DateTime("06-07-2015 10:33:26am"); 
$interval= $d1->diff($d2); 
echo ($interval->days * 24) + $interval->h; 
0

Puede probar esto:

$dayinpass = "2016-09-23 20:09:12"; 
$today = time(); 
$dayinpass= strtotime($dayinpass); 
echo round(abs($today-$dayinpass)/60/60); 
0

Esto es debido a los días de verano. el horario de verano (Estados Unidos) 2014 comenzó a las 2:00 de la mañana del domingo, 9 de marzo

Se pierde una hora durante el período comprendido entre $ fecha1 = "03/07/2014 05:49:23" a $ date2 = "2014-03-14 05:49:23";

0
$date1 = date_create('2016-12-12 09:00:00'); 

$date2 = date_create('2016-12-12 11:00:00'); 

$diff = date_diff($date1,$date2); 

$hour = $diff->h; 
Cuestiones relacionadas