sql >> Base de Datos >  >> RDS >> Mysql

Configuración del servidor web y de la base de datos para obtener la zona horaria UTC correcta

Si se limita a los tipos DATE y DATETIME de MySQL, puede ignorar en gran medida los problemas de zona horaria en MySQL. Desea evitar el tipo TIMESTAMP de MySQL porque:

En cuanto a la lectura/escritura de valores DATETIME, obtendrá exactamente lo que ingresó, lo cual es bueno.

Eso te deja con el problema de asegurarte siempre de que estás escribiendo valores UTC en la base de datos.

La mejor manera de asegurarse de que PHP esté usando UTC es configurarlo explícitamente en su aplicación usando date_default_timezone_set() . Eso asegurará que llamadas como date('Y-m-d H:i:s') le dará el valor UTC. También garantizará que algo como (new \DateTime('now'))->getTimezone() devolverá una instancia UTC \DateTimeZone.

Debe tener en cuenta, por supuesto, que las cosas se vuelven significativamente más difíciles cuando almacena valores de fecha/hora que toma de los usuarios. En esos casos, deberá determinar de alguna manera en qué zona horaria se encuentra el usuario y manejar la conversión a UTC antes de conservar los valores. Suponiendo que sus usuarios tienen alguna configuración de zona horaria por usuario, básicamente hace algo como:

/** @var \DateTimeZone $userTZ */
$userTz = getUserTimezone();
$dateTime = new \DateTime($user_submitted_date_string, $userTz);
$dateTime->setTimezone(new \DateTime('UTC'));
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');