Wie kann ich einfach Daten von UTC über PHP konvertieren?

8

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?

    
Chad Johnson 04.06.2009, 20:42
quelle

8 Antworten

7

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.).

CentOS konfigurieren

  1. Bearbeite /etc/sysconfig/clock und setze ZONE auf UTC
  2. ln -sf /usr/share/zoneinfo/UTC /etc/localtime

Konfigurieren von MySQL

  1. Importieren Sie Zeitzonen bei Bedarf in MySQL:

    mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

  2. Bearbeiten Sie my.cnf und fügen Sie Folgendes im Abschnitt [mysqld] hinzu:

    default-time-zone = 'UTC'

PHP-Code

%Vor%     
PCheese 08.06.2009, 05:57
quelle
18

Warum verwenden Sie nicht die eingebaute Funktion DateTime / TimeZone ?

%Vor%

DateTime-Klasse: Ссылка DateTimeZone Klasse: Ссылка

PHP unterstützte Zeitzonen: Ссылка

    
Jordan S. Jones 05.06.2009 04:35
quelle
8

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.

    
Richard Williams 19.04.2011 18:34
quelle
1

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:

  1. Wenn Sie NOW () oder lokale Zeitfunktionen verwenden, sollten Sie sie auf UTC_TIMESTAMP () aktualisieren
  2. Zeitstempel s haben interessante Aktualisierungs- und Einfügungseigenschaften, die Sie möglicherweise deaktivieren möchten.

Um timestamp Eigenschaften zu deaktivieren:

%Vor%

Die DEFAULT 0 deaktiviert die Aktualisierung der Spalte, wenn Sie andere Spalten aktualisieren.

    
razzed 08.06.2009 05:27
quelle
1
%Vor%

Beispiel verwenden:

%Vor%     
WwebMaster 18.01.2012 03:15
quelle
0
%Vor%     
e2p 07.11.2009 18:29
quelle
0

Das hat für mich funktioniert und es ist ziemlich sauber

%Vor%     
saada 30.01.2014 05:57
quelle
0

Konvertieren Sie Benutzer Zeitzone in Server Zeitzone und umgekehrt, mit einer einzigen Funktion:

%Vor%     
Naresh Chennuri 03.03.2016 05:08
quelle

Tags und Links