2009-01-10 7 views
5

Mein Server ist in Dallas. Ich bin in New York City .. und sowohl PHP als auch MySQL haben Konfigurationsvariablen zum Einstellen der Zeitzone.Was ist der beste Weg, Daten in PHP, MySQL, etc zu verwalten?

Wie bekomme ich alle zusammen? Welche Daten sollte ich in MySQL speichern? Wie kann ich PHP dazu bringen, das Datum basierend auf den Vorlieben des Benutzers zu ändern?

Bedenke: Ich glaube nicht, dass ich jemals PHP explizit das Datum festlegen, es verwendet immer "NOW()" in Abfragen .. aber ich sehe die Notwendigkeit, dies zu tun. Wie würde das gemacht werden?

Ich hoffe, SO Erfahrung kann mir hier helfen.

Antwort

0

Nehmen Sie Ihre Reisedaten in GMT (NPV) und dann die auf der Grundlage der lokalen Zeitzone Offset berechnen (EST ist 6, zum Beispiel, so dass man 6 Stunden der GMT hinzufügen würde).

Überprüfen Sie die Date docs für die date_default_timezone_set() Funktion.

Denken Sie daran, wenn sie auf die Datenbank zu schreiben, werden Sie Zeitzonen ändern müssen, speichern Sie das Datum, dann wieder ändern. Wenn Sie das Datum abrufen, vergessen Sie nicht, den Zeitzonenoffset hinzuzufügen.

+0

Ihre Antwort ist nicht klar genug. Es gibt verschiedene Konfigurationsmöglichkeiten: die Zeitzone von PHP, die Zeitzone von MySQL und die Zeitzone des Servers. Soll ich sagen, dass ich die Zeitzone von MySQL auf GMT setzen soll? –

+0

Es tut mir leid, aber ich verstehe immer noch nicht, was Sie hier bekommen. Können Sie ein Beispiel angeben, in dem der Benutzer seine Zeitzone angibt und der Server sich in, sagen wir, Dallas befindet. –

+0

Sie müssen die Dallas-Zeitzone verwenden (vorausgesetzt, der Server ist auf diese Zeitzone eingestellt), um in 0 GMT-Offset zu konvertieren. Wenn ein Benutzer ein NY als Zeitzone angibt, ist es einfach, den 0 GMT-Offset in EST zu konvertieren. – null

16

Verwenden Sie Unix Time überall. Es verwendet UTC, also ist es für jede Zeitzone gleich. Methoden für Datumsangaben werden normalerweise mithilfe von Zeitzoneninformationen in diese und zurück konvertiert, sodass Sie selbst eine korrekte Zeit haben.

Alternativ können Sie Unix-Zeit verwenden nur die Zeit von einem Computer auf einen anderen zu übertragen (wie von der DB zu Ihrem Server mit PHP oder JavaScript-Client). Es gibt Funktionen, um es in jeder Sprache zu konvertieren. Für MySQL ist:

UNIX_TIMESTAMP(date) 
FROM_UNIXTIME(unix_timestamp) 

Auf diese Weise könnten Sie Ihre Zeit richtig formatiert auf der DB haben und in Protokollen, aber immer noch richtig Ortszeit überall haben.

+0

Konnte nicht mehr zustimmen. –

+1

Wie implementiere ich das? NOW() in MySQL berücksichtigt die Zeitzone –

+0

UNIX_TIMESTAMP() ... vergiss. Das einzige Problem ist, dass ich gerne DATETIME benutze, weil es schöner ist, es zu betrachten, es gibt keinen Fehler 2038. –

0

Der mysql-Server speichert Daten in einem von der Zeitzone unabhängigen Format (UTC).
Aber bevor das Datum gespeichert wird, wird es mit seiner Zeitzone konvertiert.

U können die MySQL-Zeitzone pro Verbindung ändern * 1:

mysql_query('SET time_zone = "'.$timezone.'"'); 

Sie können auch die Zeitzone pro Skript ändern.

date_default_timezone_set($timezone); 

Wenn Sie sie auf die gleiche Zeitzone einstellen „2009-01-10 13.30.00“ wird die gleiche Sache sowohl MySQL und PHP bedeuten.

Aber denken Sie daran, dass die 2-Server haben unterschiedliche interne Taktwerte, also wenn Sie Zeitstempel erzeugen wollen auf den gegenwärtigen Zeitpunkt. Tun Sie das in mysql ODER PHP.

* 1) MySQL Zeitzone kann zusätzliche Unterstützung Konfiguration erfordern. Überprüfen Sie die manual

2

Ich bevorzuge die Verwendung von Daten und Zeiten in der nativen Form in Bezug auf die Umgebung, dh Unix-Zeitstempel in PHP und DATE/TIME/DATETIME/TIMESTAMP Felder in MySQL. Ich übersetze beide Werte mit FROM_UNIXTIME() und UNIX_TIMESTAMP() in einen anderen. Ich bevorzuge das anstelle von Unix-Zeitstempeln, weil native Daten einfacher zu lesen sind.