Gebäude Zeitzone-Funktion in PHP-web-Anwendung
Dies ist fast ähnliche Frage wie diese: -
Der Umgang mit Zeitzonen in PHP
Lese ich diesen thread, und habe einige Fragen, und nicht wissen, wie man aus bauen Zeitzonen-Unterstützung in PHP/MySQL-Anwendung.
Ich Schreibe eine Anwendung in PHP, wo Benutzer können wählen Sie Ihre Zeitzone.
Hier alle Zeitstempel gespeichert werden, in GMT in MySQL. Und ich bin der Konvertierung der Zeitzone zurück zu Benutzer-Zeitzone, die bei der Präsentation der Daten.
Nun sind die Probleme, die ich bin mit: -
1)
Ich zeige dem Benutzer, eine Liste von Zeitzonen bevölkert von MySQL timezone Tabellen, es ist eine RIESIGE Liste und es ist schwer zu wählen Sie aus.
So, ich will etwas umsetzen, wie windows time zone Liste. Offset mit region-info.
2)
Die PHP und MySQL können verschiedene Listen.
3)
Wo sollte ich konvertieren Zeitzonen, in PHP oder in MySQL? Ich habe die Kombination von Codierung.
Manchmal ist es einfach, wählen Sie eine Spalte umgewandelt von MySQL, manchmal ist es einfach zu konvertieren in PHP.
So, hier der Vorherige Punkt wird es sehr wichtig. Zum Beispiel, in die MySQL-time_zone-Tabellen
Asien/Kolkata " und " Asia/Calcutta, beide waren da, aber in PHP 5.2.6 die Standard-timezonedb, nur Asien/Kalkutta vorhanden ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie vor genau diesem Problem, fand ich diese Referenz, welche Karten die prägnante, im Windows-Stil Zeitzone Liste, um eine Teilmenge der lächerlich erschöpfend Unix-Stil Zeitzone Liste.
Benutzern ein dropdown dieser windows-Stil Namen (z.B., (GMT-05:00) Eastern Time (US & Canada)), und Ihre Auswahl wird gespeichert in der db in das unix-format (z.B. America/New_York)
Die Arbeit der Anwendung der Benutzer-Zeitzone-Einstellung ist fertig in PHP zum Zeitpunkt der Anzeige, mit der DateTime-Klasse. Ich denke, ich würde empfehlen dies, so können Sie sicher sein, dass die Daten, die Sie sind die Manipulation in SQL/PHP sind immer in UTC, bis Sie angezeigt wird.
Wählen Sie eine Zeitzone aus einer großen Liste ist gar nicht so schwer. Sortieren Sie die Liste nach standard-Zeit versetzt, so dass Benutzer schnell navigieren, um die richtige offset -, und von dort aus suchen Sie für Ihren genauen Standort.
Wählen Sie eine Liste aus. Ich würde dazu neigen zu gehen, je nachdem, in welcher Liste ist kürzer. Nur diejenigen, die Entscheidungen der Benutzer.
Die Mathematik zu tun, wo die Liste gewählt ist. Wenn Sie präsentieren die MySQL-Liste, haben MySQL zu tun haben, das Datum der Mathematik, wenn man mit PHP ' s list, PHP rechnen. Dies wird machen, so dass Sie nicht brauchen, um herauszufinden, einige seltsame Zuordnung, für die fehlenden Zonen auf Umsetzung.
Einer schicken Lösung könnte mit sich bringen, den Benutzer auffordert, den Standort und rechnet man Ihre Zeitzone. (Allerdings haben die option explizit zu setzen, es so gut)
Dies ist die Art von situation, in der eine benutzerdefinierte Klasse vielleicht die beste Lösung sein. Dann können Sie verschieben Termine um mit Ihren Zeitzonen. Zum Glück, PHP v5 hat nur so ein Objekt gebaut wurde. Sie müssen nur daran zu erinnern, um code-Dinge, so dass, wenn Sie verlassen sich auf eine implizite Zeitzone, es ist, weil Sie wissen, Sie haben früher es explizit. Dies bedeutet auch, wenn Sie nicht wissen, was der implizite Wert ist, gehen Sie bitten, effektiv macht es explizit.
Suchen in der PHP-timezone-Unterstützung und MySQL timezone Unterstützung, die ich tun würde, Zeitzone Zeug größtenteils in PHP. MySQL-Unterstützung ist weitgehend orientiert es das Konzept des "jetzt".
Ach ja: Sie nicht tun wollen expliziten Datums-Arithmetik (z.B. hinzufügen von 86400 Sekunden hinzufügen "für einen Tag"). Damit der PHP-Objekt oder Bibliotheken zu tun. Sie haben Fehler behoben, die Sie nicht gedacht haben. (Ich schrieb einmal ein Objekt für eine spezielle Art von manipulation von Datum und verbrachte Wochen kämpft ein blinkendes " off-by-one-hour bug, bis ich entdeckte, das ein spot hinzufügen von 86400 für einen Tag übergang statt mit
mktime()
. Es stellte sich heraus, dass die Sommerzeit-Regeln wurden messing Dinge. Die, natürlich, war ich nicht überprüft werden.)