Guía 28 – Situar el servidor en un «timezone» concreto

Aquellos que alquilamos un hosting para nuestros desarrollos, yo me encuentro en este caso, vemos que nuestras máquinas unas veces están en un país y otras veces en otro, y que sobre todo ni el sistema operativo ni el gestor de base de datos está en la zona horaria que a mi me interesa. En algunos casos, a través de CPanel se puede configurar el PHP y se puede indicar la zona horaria (time_zone), pero no así el gestor de base de datos, estando normalmente en configuración UTC.

También, puede ser que aún teniendo la capacidad de ajustar el servidor, requieras que diferentes aplicaciones tengan zonas horarias diferentes.

En mi caso concreto, al residir en Madrid, el server, tanto en SO como en DB, están en una hora menos.

Objetivo

Configurar las aplicaciones de PHPRunner para situarla en una zona horaria independientemente de la zona horaria del servidor.

DEMO: https://fhumanes.com/change_time/

Solución técnica

Para ajustar la zona horaria es necesario ajustar la hora del SO y del gestor de base de datos porque las operaciones con fechas, aunque la mayoría son en el SO (PHP), también se utiliza expresiones de BD para definir tiempos a insertar o actualizar en los atributos de las tablas.

Para ajustar en PHPRunner tenemos que modificar el evento «After application initialized«. El código que tiene este evento se ejecuta en cada petición e interacción que el usuario hace con la aplicación.

// Poner zona horaria distinta al servidor
$now = date('d-m-Y H:i:s');
$fecha = new DateTime($now, new DateTimeZone('Europe/Madrid')); 
$timezone = $fecha->format('P');  // "+01:00" para Madrid
// MYSQL ---------------------------------------------------------------
DB::Exec("SET time_zone = '$timezone'"); // 
// PHP  ----------------------------------------------------------------
date_default_timezone_set('Europe/Madrid'); // Madrid

Tienes que ajustar la zona horaria, en este caso se ha utilizado «Europe/Madrid». Para saber la clave que debes poner tienes que utilizar las que existen en esta página: https://www.php.net/manual/en/timezones.php

En el ejemplo, que tiene esta imagen:

Para obtener la fecha de PHP se utiliza la función now() .

Para obtener la fecha de MySQL se utiliza estas líneas de código:

$rs = DB::Query("select now() hora from dual");
$values['date_mysql'] = $rs->value("hora");

Os dejo el ejemplo para que lo ajustéis a vuestra zona horaria y podáis hacer todas las prueba que necesitéis. Aunque está en versión 10.6, se puede utilizar en cualquier versión 10.X de PHPRunner.

Para cualquier duda o problema, podéis escribirme a [email protected]

Adjuntos

Archivo Tamaño de archivo Descargas
zip PHPRunner 10.6 y backup de base de datos 34 KB 262

Blog personal para facilitar soporte gratuito a usuarios de React y PHPRunner