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');