nachopro yendo de la cama a la compu…

31Oct/074

Ajustando la hora según zona horaria en PHP

Muchas veces, los programadores, tenemos que resolver problemas y cálculos en donde alguna de sus variables es el tiempo. Un ejemplo clásico es guardar la hora en la que se realizó un ingreso al sistema o la registración de un cliente.

Generalmente, y más que nada en PHP, uno utiliza tanto servidores locales (ubicados en país de uno, con la hora en dicha zona horaria) como servidores de Estados Unidos, Alemania o cualquier otra zona del mundo. En este segundo caso surgen los problemas porque cada servidor va a tener la hora que corresponde a su ubicación geográfica, sigamos el siguiente ejemplo:

Yo, nachopro, hago un trabajo para un cliente que tiene su sistema acá, en Argentina. Este cliente contrató un servidor de última generación que se ubica en Texas (Estados unidos). Resultando que la hora que mi cliente necesita es la GMT-3 mientras que la hora que tiene el servidor es GMT-8.

El problema es que al usar la función date() de PHP, siendo las 9:42 AM acá en Argentina, me va a devolver 4:42 AM. Una notable diferencia de 5 horas, nada menos :P

La solución consiste en generar la hora en base a la hora GMT-0 y sumarle nuestra diferencia respecto a ella. Es decir, nosotros estamos en GMT-3. Quiere decir que si la hora GMT es 12:46 y le sumamos nuestra zona horaria (-3) obtenemos 12:46 + (-3:00) = 9:46! En el caso de Texas realizamos 12:46 + (-8:00) = 4:46!

Esto es amazing y se resuelve con el siguiente código de PHP:

?php

function hora_local($zona_horaria = 0)
{
	if ($zona_horaria > -12.1 and $zona_horaria < 12.1)
	{
		$hora_local = time() + ($zona_horaria * 3600);
		return $hora_local;
	}
	return 'error';
}

echo gmdate('d-m-Y H:i:s', hora_local(-8));

?

Esta función recibe una zona horaria y nos devuelve los segundos de la hora actual más los segundos de dicha zona horaria. Se debe emplear como segundo parámetro de la función gmdate() para que genere correctamente la hora ;) .

En caso de que se ingrese una zona horaria mayor a 12 o menor a -12 la función retorna un string para generar un error en la función gmdate(), la cual acepta sólo enteros como segundo parámetro, y así reconocer fácilmente un error de zona horaria.

Espero que les sirva. Hasta la próxima!

Filed under: PHP Leave a comment
Comments (4) Trackbacks (0)
  1. Gracias a este post me di cuenta que el sistema de firmas usa la hora local del servidor y no la de mi lugar de residencia!

  2. Ahora sí uso la hora de mi interés ;) saludos!

  3. Gracias, muy util… saludos

  4. Gracias amigo, en verdad que me sirvio, algo raro es que cambie la zona horaria a -4, pero yo estoy en la -6 hora central, jeje pero ya quedo, eso es lo que importa, saludos :?


Leave a comment


*
Before you submit form:
Human test by Not Captcha

No trackbacks yet.

Pages

Categories

Blogroll

Archive

Meta