Was ist der beste Weg, um mit verschiedenen Zeitzonen umzugehen?

9

Ich arbeite an einer Webanwendung, in der viele verschiedene Benutzer aus der ganzen Welt Updates vornehmen. Ich frage mich, wie ich mit Zeitzonen am besten umgehen kann. Im Idealfall sehen alle Benutzer ein Ereignis anhand ihrer Ortszeit an.

Sollte die Server-Betriebssystemzeit auf GMT, die physische Standortzeit oder meine Entwicklungsstandortzeit eingestellt werden?

Sollte die Anwendungslogik (PHP) und die Datenbank (MySQL) so eingestellt sein, dass Daten als GMT oder Ortszeit (lokal für Benutzer) gespeichert werden?

Gibt es einen Industriestandard oder sogar eine einfache / offensichtliche Lösung, die ich einfach nicht sehe?

Thomas Hunter
quelle

Antworten:

4

Speichern Sie Ihre Ereignisse im TIMESTAMP-Format von MySQL - es wird intern als UTC gespeichert, unabhängig von der Zeitzone des Servers / Benutzers. Auf diese Weise können die Daten unabhängig von der spezifischen Konfiguration Ihres Servers portiert werden. Wenn Sie es in einer bestimmten Zeitzone speichern, müssen Sie es viel mehr in verschiedene Zeitzonen konvertieren.

Rufen Sie es aus der Datenbank in einen numerischen Zeitstempel (mit der Funktion UNIX_TIMESTAMP ()) ab, um es mit den verschiedenen Datums- / Uhrzeitfunktionen von PHP (z. B. date ()) zu verwenden.

Sie müssen dann für jeden Benutzer die PHP-Zeitzone mithilfe von date_default_timezone_set () festlegen. Sie können diese Informationen entweder über vom Benutzer konfigurierbare Einstellungen oder über die Browser-Header (weniger genau) abrufen . Sie können dann die PHP-Datums- / Zeitfunktionen wie gewohnt verwenden, und die Ausgabe erfolgt in der Zeitzone des Benutzers.

Eine andere Alternative besteht darin, die relative Zeit anzuzeigen (zum Beispiel: "vor 5 Stunden und 2 Minuten").

Eran Galperin
quelle
5
Beachten Sie, dass das (MySQL-) timestampeinen begrenzten Bereich von 1970-01-01 00:00:01 UTCbis hat 2038-01-19 03:14:07 UTC, in dem beispielsweise keine Geburtsdaten gespeichert werden können (zumindest nicht für Personen, die älter als 40 Jahre sind). Tatsächlich timestampist dies die am wenigsten geeignete Lösung zum Speichern von Datums- und Zeitaufzeichnungen. Verwenden Sie ein datetimeFeld und speichern Sie alles als UTC.
Feeela
7

Ich würde die UTC-Zeit in der Datenbank verwenden und die Clients diese bei Bedarf in ihre Ortszeit konvertieren lassen

Rachel
quelle
UTC = GMT. Ich bin an SQL Server
Rachel
9
UTC! = GMT. UTC kompensiert die zunehmende Jahresdauer, die durch die verlangsamte Rotation der Erde verursacht wird, während GMT dies nicht tut. Obwohl in der Praxis die Begriffe vertauscht sind, ist es gut, den Unterschied zu kennen. en.wikipedia.org/wiki/Utc
1
@DeveloperArt: Wusste das nicht, danke :)
Rachel