Ich speichere Daten in einer MySQL-Datenbank in Datetime-Feldern in UTC. Ich verwende PHP und ich habe date_timezone_set ('UTC') aufgerufen, so dass alle Aufrufe von date () (ohne Zeitstempel) das Datum in UTC zurückgeben.
Ich habe es dann so, dass eine bestimmte Website ihre Zeitzone auswählen kann. Jetzt möchte ich, dass Daten in der Zeitzone der Site angezeigt werden. Also, wenn ich ein Datum als '2009-04-01 15:36:13' gespeichert habe, sollte es für einen Benutzer in der PDT-Zeitzone (-7 Stunden) als '2009-04-01 08:36:13' angezeigt werden. .
Was ist die einfachste Methode (am wenigsten Code), um dies über PHP zu tun? Bisher habe ich nur an
gedacht %Vor%Gibt es einen kürzeren Weg?
Das haben wir mit unseren Servern gemacht. Wir setzen alles auf UTC, und wir werden in der Zeitzone des Benutzers angezeigt, indem wir direkt aus UTC umrechnen. Der Code am Ende dieses Beitrags ist ein Beispiel dafür, wie dies funktioniert. Sie sollten sicherstellen, dass es in allen Fällen mit Ihrem Setup funktioniert (z. B. Sommerzeit, usw.).
/etc/sysconfig/clock
und setze ZONE
auf UTC
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
Importieren Sie Zeitzonen bei Bedarf in MySQL:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Bearbeiten Sie my.cnf und fügen Sie Folgendes im Abschnitt [mysqld] hinzu:
default-time-zone = 'UTC'
Warum verwenden Sie nicht die eingebaute Funktion DateTime / TimeZone ?
%Vor%DateTime-Klasse: Ссылка DateTimeZone Klasse: Ссылка
PHP unterstützte Zeitzonen: Ссылка
Was Sie tun, ist der richtige Weg, Dinge zu tun. Ich würde empfehlen, nur in UTC zu arbeiten und nur in letzter Minute für die Anzeige zu konvertieren.
Hier ist eine kurze Funktion, die ich für die Zeitzonenkonvertierung mithilfe der DateTime-Klasse zusammengestellt habe, die mit PHP geliefert wird. Es ist ein bisschen mehr Code als Sie haben, aber ich denke, es ist einfacher und eine bessere Möglichkeit, Dinge zu strukturieren ...
%Vor%Ich hoffe, das hilft.
Nachdem Sie viel Zeit mit diesem Thema verbracht haben, versuchen Sie nicht, die Zeitzonenübersetzung selbst zu implementieren. Es ist eine königliche PIA, die mit Schwierigkeiten behaftet ist, und es ist sehr schwierig, sie international in Ordnung zu bringen.
Das heißt, die beste Option besteht darin, Ihre datetime s in MySQL in timestamp s zu konvertieren und einfach die Datenbank zur Konvertierung von Zeiten zu verwenden:
%Vor%Zeitstempel s in MySQL sind kleiner und unterstützen die Zeitzonenübersetzung. datetime nicht.
Bevor Sie die Site-Informationen auf der Seite anzeigen, rufen Sie einfach den obigen Befehl auf und er wird korrekt angezeigt, ohne dass PHP-Code geändert wird.
Vorbehalte:
Um timestamp Eigenschaften zu deaktivieren:
%Vor%Die DEFAULT 0 deaktiviert die Aktualisierung der Spalte, wenn Sie andere Spalten aktualisieren.
Konvertieren Sie Benutzer Zeitzone in Server Zeitzone und umgekehrt, mit einer einzigen Funktion:
%Vor%