Este es un punto que la mayoría pasa por alto, en el mejor de los casos se configura la sección de timezones en PHP y ahí termina el asunto.
Para que no existan discrepancias en los registros es necesario sincronizar los tres aspectos, ya que cada uno maneja su propio registro de tiempo.
- PHP
- MySQL
- El Servidor.
El Servidor
En primer lugar para saber la fecha y la zona horaria en la que se encuentra el servidor ejecutamos lo siguiente en la consola:
date
Dependiendo del SO la manera de cambiar la fecha y zona horaria varia (no mucho) pero una herramienta útil es usar NTP (Network Time Protocol) para definir este aspecto, la mayoría por no decir todos los SO y sus respectivas distribuciones tienen paquetes para su instalación y uso.
PHP
Para ver la fecha actual se maneja la función date, por ejemplo:
<?php echo date('D M j G:i:s T Y'); ?>
*Pero ojo que la función date devolvería la fecha del cliente y no del servidor.
Para definir la zona horaria se modifica el archivo php.ini en la directriz timezones:
... date.timezone = America/New_York ...
MySQL
En primer lugar verificar la zona horaria y fecha en la que se encuentra MySQL, mediante una consulta:
SELECT NOW();
Y finalmente definir la fecha:
SET GLOBAL time_zone = America/New_York;
Mas info: MySQL Server Time Zone Support