Umgang mit PHP-server und MySQL-server in unterschiedlichen Zeitzonen
Für diejenigen von uns, die mit standard shared-hosting-Pakete, wie GoDaddy oder Netzwerk-Lösungen, wie gehst du mit datetime-Konvertierungen, wenn Sie Ihre hosting-server (PHP) und MySQL-server sich in verschiedenen Zeitzonen?
Außerdem hat jemand einige best-practice-Empfehlungen für die Bestimmung, welche Zeitzone ein Besucher Ihrer Website ist in, und die Manipulation einer datetime-variable, richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seite PHP 5.1.0 können Sie date_default_timezone_set() - Funktion, um die Standard-Zeitzone für alle Datum/Zeit-Funktionen in einem Skript.
For MySql (zitiert aus MySQL-Server-Unterstützung Für Zeitzonen Seite)
Die für Sie von Interesse ist die pro-Verbindung-Einstellung der Zeitzonen, die Sie verwenden würden, an den Anfang Ihrer Skripte
Als für die Erkennung der client-Zeitzone-Einstellung, Sie könnte verwenden Sie ein wenig JavaScript zu bekommen und zu speichern, dass Informationen, die ein cookie, und verwenden Sie es auf der nachfolgenden Seite liest, zu berechnen die richtige Zeitzone.
Oder Sie könnten, bieten Benutzern die Wahl, um Ihre Zeit Zonen selbst.
Speichern alles als UTC. Sie können Konvertierungen auf client-Ebene, oder auf der server-Seite mithilfe der client-Einstellungen.
php - Datum
mysql - utc-Zeitstempel
RE die Antwort von Željko Živković, Zeitzone Deskriptoren wie "Europa/London" nur funktioniert, wenn der mySQL-admin hat zusätzlich die Zeitzone-Tabellen, um das system, und hält Sie aktualisiert.
Ansonsten sind Sie beschränkt auf numerischen offsets wie '-4:00'. Glücklicherweise ist die php date('P') - format bringt es (wie von 5.1.3)
Also sagen, dass eine app config-Datei, die Sie haben könnten
Das bedeutet, dass PHP und mySQL Zustimmen werden, auf welche Zeitzone offset zu verwenden.
Verwenden Sie immer die ZEITSTEMPEL für die Speicherung von Zeit-Werte. Die Spalte wird gespeichert als UNIX_TIME (Epoche), sondern implizit aus der aktuellen time_zone ausgeglichen, wenn geschrieben, und wieder beim Lesen.
Wenn Sie anzeigen möchten, die Zeiten für Benutzer in anderen Zeitzonen befinden, anstatt eine Globale zu definieren(), gesetzt Ihre angegebene Zeitzone in der oben genannten. TIMESTAMP-Werte werden automatisch umgewandelt, die von mySQL durch die Zeit, Ihre app sieht das Ergebnis-set (das kann manchmal ein problem sein, wenn Sie müssen eigentlich wissen, das ursprüngliche der Zeitzone des Ereignisses auch dann muss man es in einer anderen Spalte)
und so weit wie, "warum nicht einfach speichern Sie alle mal als int ist", heißt verlieren Sie die Fähigkeit zu vergleichen und zu validieren, Daten und bedeutet, dass du immer zu konvertieren in date-Darstellung auf der app-Ebene (und ist schwer auf die Augen, wenn Sie sich die Daten direkt - schnell-was passiert auf der 1254369600?)
Speichere ich alle meine Daten, die als eine bigint, weil Sie hatten Probleme mit dem dateTime-Typ vor. Ich speichern Sie das Ergebnis von time (), PHP-Funktion in es, jetzt zählen Sie als in der gleichen Zeitzone 🙂
In php set von timezone in der php.ini-Datei:
ini_set("date.timezone", "America/Los_Angeles");
oder in bestimmten Seite, die Sie tun können, wie:
date_default_timezone_set("America/Los_Angeles");
In mysql Sie tun können:
SET GLOBAL time_zone = 'America/Los_Angeles';