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

PHP y MySQL:Conversión de TIMESTAMP almacenado en la zona horaria local del usuario

Los valores de fecha/hora/fechahora se almacenan en MySQL a medida que los proporciona. Es decir. si INSERT la cadena 2012-04-17 12:03:23 en un DATETIME columna, ese es el valor que se almacenará. Se convertirá internamente en una marca de tiempo que puede o no ser precisa (ver a continuación), pero cuando vuelva a consultar el valor, obtendrá el mismo valor; el viaje de ida y vuelta es transparente.

Pueden surgir problemas si intenta hacer cálculos de tiempo dentro de SQL. Es decir. cualquier operación que requiera que SQL tenga en cuenta la zona horaria y/o la hora del servidor. Por ejemplo, usando NOW() . Para cualquiera de esas operaciones, la zona horaria y/o la hora del servidor debe ser configurado correctamente. Consulte Problemas de zona horaria .

Si eso no le preocupa y solo necesita hacer cálculos en PHP, solo necesita asegurarse de saber de qué zona horaria a qué zona horaria desea convertir. Para ello puede sería conveniente estandarizar todas las horas a UTC, pero no es necesario, ya que las conversiones de zona horaria de cualquier zona horaria a cualquier otra zona horaria funcionan igual de bien, siempre que tenga claro de qué zona horaria está convirtiendo.

date_default_timezone_set('Asia/Tokyo'); // your reference timezone here

$date = date('Y-m-d H:i:s');

/* INSERT $date INTO database */;

$date = /* SELECT date FROM database */;

$usersTimezone = new DateTimeZone('America/Vancouver');
$l10nDate = new DateTime($date);
$l10nDate->setTimeZone($usersTimezone);
echo $l10nDate->format('Y-m-d H:i:s');