Obtener la hora según el huso horario en PHP

En MegaPublik necesitábamos lograr que de alguna manera, según donde estuviera situado el usuario dentro del mundo de MegaPublik, se mostrara un horario distinto, basado en la zona horaria del lugar. Buscamos mucho, y nos fue difícil, pero encontramos un módulo PEAR que proporcionaba todo lo que necesitábamos. El problema era que para aplicarlo a CodeIgniter necesitábamos una función más simple, por lo que la adaptamos, de manera que ahora se puede usar no solo en CodeIgniter, sino que puede ser usada en cualquier proyecto PHP.

RelojEsta función PHP que ahora os voy a presentar, nos dará la hora en formato unix según un parámetro (timezone). Aún así, es importante saber que deberemos configurar el huso horario del script como UTC, incluyendo despues del <?php lo siguiente:

date_default_timezone_set('UTC');

En el caso de CodeIgniter, con incluirlo al principio del index.php, justo después del <?php, será suficiente para poder usarlo en todo el programa. Luego, la función que usaremos será esta:

function now($timezone = NULL)
{
    if (is_null($timezone))
    {
        return time();
    }
    else
    {
        $timezone   = new DateTimeZone($timezone);
        $now        = new DateTime('now', $timezone);
        $offset     = $timezone->getOffset($now);
        $time       = time() + $offset;

        return $time;
    }
}

En el caso de CodeIgniter, lo único que deberemos hacer será crear el archivo /application/helpers/MY_date_helper.php y introducir en el la nueva función now().

Con esta función, al introducir now() sin parámetros, nos retornará el tiempo time() actual en el huso horario UTC, y al pasarle un huso horario válido, nos dará la hora time() en esa zona horaria. De esta manera podremos configurar un script que muestre la hora según el huso horario del usuario registrado, sin tener en cuenta el del servidor ni el del cliente.

Nota: Necesita un servidor con la versión de PHP superior a 5.2.0.

Comentario (1)

  1. Buena información, era algo parecido a lo que buscaba, gracias. 1Saludo.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.