mysql - rango - La mejor manera de almacenar una fecha/hora para diferentes zonas horarias
mysql obtener fecha sin hora (5)
¿Cuál es la mejor manera de almacenar la información de la zona horaria con fechas / horas de manera uniforme para que las personas puedan ingresar horas desde cualquier parte del mundo en su propia hora local? Otros usuarios tendrían la posibilidad de ver los horarios en su propia hora local y el horario local original en la página web.
Almacene los datos de tiempo como GMT. Muestrelo usando la hora local. Esto requiere una compensación simple de GMT. Ahora, si los políticos dejaran la fecha de inicio y finalización del horario de verano solo ...
Estoy de acuerdo con Staale, pero agrego que los tiempos deben almacenarse en tiempo zulú (comúnmente llamado UTC), para facilitar la traducción a otras zonas horarias. No confíe en almacenar datos en la zona horaria utilizada por su servidor.
Mi punto de vista siempre ha sido almacenar las marcas de tiempo numéricas exactas (segundos o milisegundos desde la medianoche del 1 de enero de 1970 GMT), ya que es un formato que se convierte fácilmente en una fecha y hora reales en cualquier zona horaria.
La desventaja de esto es que los datos no se pueden ver de inmediato a través de las herramientas SQL normales. El cliente mysql cli tiene métodos para esto (FROM_UNIXTIMESTAMP).
Siempre almacene las veces como UTC / GMT. Consulte los documentos de mysql para ver qué tipo de columna es mejor para el rango de fechas y / o precisión que desea admitir.
En la entrada, convierta a UTC y almacene el desplazamiento de la zona horaria del cliente en una segunda columna. Luego puede convertir fácilmente a cualquier zona horaria que desee mostrar, o usar el desplazamiento enviado para recrear la marca de tiempo original.
Sugiero insertar la fecha en la zona horaria UTC. Esto le ahorrará muchos dolores de cabeza en el futuro (problemas de ahorro de luz diurna, etc.)
"INSERT INTO abc_table (registrationtime) VALUES (UTC_TIMESTAMP())"
Cuando consulto mis datos, utilizo el siguiente script PHP
<? while($row = mysql_fetch_array($registration)){
$dt_obj = new DateTime($row[''message_sent_timestamp'']." UTC");
$dt_obj->setTimezone(new DateTimeZone(''Europe/Istanbul''));
echo $formatted_date_long=date_format($dt_obj, ''Y-m-d H:i:s''); } ?>
Puede reemplazar el valor de datetimezone con una de las zonas horarias php disponibles aquí: