Establecer tu zona horaria en la conexión mysql de tu aplicación php

27 de marzo, 2017 @ 16:02 — 0 comentariosDescargar PDF

En muchas ocasiones el equipo en que estamos ejecutando nuestra aplicación no tendrá correctamente establecida la hora en la base de datos en el sentido de que la hora por defecto no será la hora de nuestra franja horaria. Así que cuando realizamos la conexión a mysql debemos establecer la zona horaria que queremos. Vamos a ver cómo conseguir este resultado en php.

En primer lugar debemos saber que php usará el dato que le indiquemos en la directiva date.timezone . En todos nuestros servicios actualmente dicha directiva está indicada como

date.timezone = Europe/Madrid

Por lo que como solución inicial, puedes acudir  a la configuración de php y establecer dicha directiva al valor que necesites:

Modificar la configuración de PHP

 

Los valores que date.timezone puede tener son los siguientes:

http://php.net/manual/es/timezones.php

Simplemente debes elegir cuál es el que se adecúa a tu zona.

En el caso de mysql, sin embargo, las funciones  usarán el timezone establecido por defecto en mysql, por lo que aunque establezcas en php un timezone determinado, no obtendrás el timezone deseado desde las funciones de mysql, cuya documentación puedes encontrar en la siguiente web

https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

Para que ambas fechas estén sincronizadas es necesario entonces establecer en la conexión de mysql cuál es tu timezone actual. Recuerda que tienes los timezones disponibles en este enlace. Puedes usar php del siguiente modo para establecer un timezone.

<?php

$bd = new PDO('mysql:host=localhost;dbname=DBNAME', 'DBUSER', 'DBPASSWORD');

$mitz="America/Mexico_City";
$tz = (new DateTime('now', new DateTimeZone($mitz)))->format('P');
$bd->exec("SET time_zone='$tz';");

$k= $bd->query("select now() as mifecha") ;
$q= $k->fetch();

echo "Esta es la hora en ".$mitz." en la base de datos:  " ;
echo $q['mifecha'];

?>