Ajustar fecha según Zona horaria o GMT en PHP

Todos los servidores tienen la hora en GMT+0 pero según la configuración en php.ini nos mostrará cierta hora, lo puedes comprobar visualizando la hora completa date(«r»,time()), o con date(«l jS \of F Y h:i:s A – \G\M\T: P», time()) el problema se da cuando queremos mostrar la fecha/hora según una franja horaria específica, en php se puede configurar la hora usando date_default_timezone_set e indicando la franja según el parámetro que permite la función, pero en lo personal estoy acostumbrado a tener la hora del servidor de una tabla y según el GMT que le indico que me muestre la hora

Esta es una función que logra mostrar la fecha/hora dándole el GMT que deseas

<html>
<head>
<title>Fecha Actual</title>
</head>
<body>
Hora del Servidor: <?php echo date("l jS \of F Y h:i:s A - \G\M\T: P", time());?><br />
<?php
function mifechagmt($fecha_timestamp,$gmt=0)
{
	$timestamp=$fecha_timestamp; //puedes poner aquí la hora en formato "Unix timestamp" obtenida de una tabla
	$diferenciahorasgmt = (date('Z', time()) / 3600 - $gmt) * 3600; //La diferencia de horas entre el GMT del servidor y el GMT que queremos, en mi caso mi servidor es GTM-4, y si quiero un GTM -5 la diferencia será de -1 hora
	$timestamp_ajuste = $timestamp - $diferenciahorasgmt; //restamos a la hora actual la diferencia horaria en mi caso será -1 hora
	$fecha = date("l jS \of F Y h:i:s A", $timestamp_ajuste); //mostramos la fecha/hora
	return $fecha;
}
?>
<table border="1">
<?php 
for ($i=-12;$i<=12;$i++)
{
echo "<tr><td>GMT $i</td><td>".mifechagmt(time(),$i)."</td></tr>";
}
?>
</table>

</body>
</html>

mifechagmt() recibe 2 parámetros, una hora en formato UNIX que puede ser la actual o tomada de una tabla, y el GMT como valor numérico para mostrar la fecha/hora, ya si desean puede agregarle un tercer parámetro que les indique el formato a mostrar.

Lo puedes ver aquí en funcionamiento: http://www.elcodigofuente.com/ejemplos/fecha.php

3 Comentarios para “Ajustar fecha según Zona horaria o GMT en PHP”

  1. Yo quisiera saber dos cosas, a este scripts se le puede añadir las horas que son por ejemplo +03:30? y añadir las lo del cambio de hora de verano?

  2. Con esto solucione el error que me daba:

    Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone

    Saludos.

  3. Pero no es mas facil hacer esto?

    le restas o le sumas dependiendo donde te encuentres.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *