miércoles, 10 de abril de 2013

Calcular número de segundos entre dos fechas con PHP

En ocaciones en tus desarrollos con PHP necesitas calcular el número de segundos transcurrido entre dos fechas, por ejemplo digamos que quieres saber el tiempo transcurrido desde que el usuario inició su sessión hasta que la finalizó.

Entonces digamos que desde una base de datos (por ejemplo MySQL) consultaste la fecha del último inicio de sesión y del fin de sessión, del usuario que generalmente esta almacenada como tipo de dato timestamp (YYYY-MM-DD hh:mm:ss) ejemplo (2013-04-11 00:34:19). Usamos el siguiente código

$fechaInicial = '2013-04-11 00:34:19';
$fechaFinal = '2013-04-11 00:35:50';

$segundos = strtotime($fechaFinal) - strtotime($fechaInicial);
print $segundos;

Esto dara como resultado que el usario ha estado logueado 151 segundos con esto ya es mas fácil trasformarle a minutos o a lo que quieras.

Lo que se hace es utilizar la funcion strtotime, la misma que recibe como parámetro una fecha que este en formato de fecha en Inglés y la transforma a formato de fecha UNIX(el número de segundos desde el 1 de Enero del 1970 00:00:00 UTC).

Es decir strtotime transforma para el ejemplo  2013-04-11 00:34:19 a 1365640459. Lo que hara la funció será lo siguiente:

     ?          =  2013-04-11 00:34:19  -  2013-04-11 00:34:19 
$segundos = strtotime($fechaFinal) -  strtotime($fechaInicial);
151           =         1365640610       -      1365640459

Un problema que suele ocurrir al usar strtotime es cuando calculas el número de segundos entre una fecha inicial y la fecha actual que te devuelve el sistema, esto debido a que si no tienes configurado la zona horaria de tu país, el sistema devolvera la fecha y hora configurada por defecto que corresponde a UTC.

Para configurar la zona horaria en mi caso que estoy en Ecuador, puedes hacerlo de dos maneras:

Antes de las líneas de código que van a calcular el número de segundos debes incluir lo siguiente
 date_default_timezone_set('America/Guayaquil');

Para ver el listado de zonas horarias que soporta PHP y encontrar la tuya lo puedes hacer desde http://www.php.net/manual/es/timezones.america.php
 
O la otra manera es hacerlo directamente en el archivo de configuración php.ini en donde debes buscar la linea date.timezone = UTC y remplazarla por date.timezone = America/Guayaquil, o por la zona horaria de tu país. 

 

1 comentario: