Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Speichern bestimmter Datums-/Uhrzeitwerte für Benutzer in verschiedenen Zeitzonen

Da Sie über die Planung der Zukunft sprechen Zeit, Speicherung nur UTC ist nicht unbedingt der beste Ansatz.

Denken Sie daran, dass sich Zeitzonenregeln ändern können (und tun). Wenn Sie Ihre Zeitzonendaten aktualisieren (in PHP erfolgt dies mit der timezonedb von PECL Paket), dann könnten alle Daten, die Sie bereits in UTC konvertiert haben, ungültig sein.

Die bessere Lösung besteht darin, mehrere Werte zu speichern:

  • Das ursprüngliche lokale Datum und die Uhrzeit

  • Die ursprüngliche Zeitzone (z. B. "America/New_York" )

  • Das UTC-Datum und die Uhrzeit, konvertiert aus den lokalen Werten

Wenn Sie sehen möchten, ob es an der Zeit ist, die Aufgabe auszuführen, vergleichen Sie das aktuelle UTC-Datum und die Uhrzeit mit dem gespeicherten UTC-Wert.

Wenn Sie Zeitzonenaktualisierungen anwenden, verwerfen Sie die zuvor konvertierten UTC-Werte für alle zukünftigen Einträge und berechnen neue basierend auf den aktualisierten Daten.

Wenn Sie dies nicht tun, verlieren Sie die Absicht, die der Benutzer ursprünglich angegeben hat. Und wenn Sie Ihre Zeitzonendaten nicht auf dem neuesten Stand halten, wird Ihr System verschiedene Änderungen auf der ganzen Welt nicht erkennen, wie z. B. die Änderungen, die Anfang dieses Jahres in Ägypten vorgenommen wurden, oder die Änderungen, die im Oktober für Russland kommen.

Letzter Punkt - Bei richtiger Implementierung sollte die Zeitzone Ihres Servers keine Rolle spielen. Vergleichen Sie UTC mit UTC.