Javascript - /PHP-und Zeitzonen
Ich würde gerne in der Lage sein, zu erraten, die Benutzer timezone offset und ob die Sommerzeit angewendet wird. Derzeit werden die endgültigen code, den ich gefunden habe für dies hier:
http://www.michaelapproved.com/articles/daylight-saving-time-dst-detect/
So, das gibt mir die offset-zusammen mit der DST-Indikator.
Nun möchte ich diese in meinem PHP-Skripte, um die Ausgabe der lokalen Datum/Zeit für den Benutzer....aber was ist am besten für diese? Ich Figur ich habe 2 Optionen:
a) Wählen Sie eine zufällige Zeitzone hat den gleichen offset und Sommerzeit-Einstellung von der Ausgabe von timezone_abbreviations_list(). Dann rufen Sie date_timezone_set() mit dieser um die richtige Behandlung zu der Zeit.
b) Weiterhin die Behandlung, die Datum als UTC-aber nur einige timestamp-neben hinzufügen der entsprechenden Anzahl von Stunden auf.
Mein Gefühl ist, dass option B ist der beste Weg. Der Grund dafür ist, dass mit Einem, ich könnte mit einer Zeitzone, die zwar korrekt in Bezug auf die offset - /Sommerzeit, haben vielleicht einige obscur Regeln in Platz hinter der Szene geben könnte überraschende Ergebnisse (ich weiß nicht jeder, aber trotzdem denke ich nicht, dass kann ich ausschließen).
Ich würde dann überprüfen Sie erneut die Zeitzone mit Javascript am Anfang der jeweiligen Sitzung, um zu erfassen, wenn der Benutzer die Zeitzone ändert (was sehr unwahrscheinlich ist), oder Sie übergeben Sie in der DST-Periode.
Sorry für die Gehirn-dump - ich bin wirklich nur nach einer Art von Gewissheit, dass die Ansätze oben sind gültig.
Dank,
James.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu robust bestimmen eines Benutzers timezone mit javascript. Check-out jsTimezoneDetect.
Wird es Ihnen ein Olsen-Zeitzone-Datenbank-Schlüssel, die Sie verwenden können für die server-Seite datetime-Berechnungen.
Ist dies eine Umfrage, dann "b" ist meine Stimme.
Erstens, alle Zeiten werden in UTC gespeichert. Das ist dogma. Es ist sehr sinnvoll, dogma, der Art, über die Sie am Ende sagen "ich wünschte, ich hätte gefolgt, dass," nachdem das Projekt komplizierter. Unter anderem ist es das einzige eindeutige, konsistente Art und Weise zu speichern Sie alle Punkte in der Zeit. Jede Zeitzone mit Sommerzeit hat mehrdeutigen Zeit-Referenzen rund um den Schalter (1:30 Uhr geschieht in der Regel zweimal, zum Beispiel). Auch bei der Umstellung zwischen den Zeitzonen, die meisten der Zeit, die Sie am Ende mit UTC als Vermittler sowieso.
Sekunde alle, Sie haben zu entscheiden, ob Ihre Website ist international, oder nicht. Wenn nicht, dann machen Sie die Regeln für die sechs Zeitzonen der USA und Ende. Mit drei Browsern reporting Zeitstempel in Ihre eigene verrückte Weise, das ist immer noch nur 18 Fällen, und es sollte möglich sein, Sie zu behandeln. Alles darüber hinaus, und Sie sollten davon ausgehen, dass es erfordert einen höheren Abschluss zu antizipieren Sommerzeit Unterschiede. Die Zeiten wechseln, an verschiedenen Tagen an verschiedenen stellen.
Ihre größte problem mit b ist, dass, wenn dies ist eine Kalender-ähnliche Anwendung, Planung wird noch ein Problem, wenn Sie können nicht genau bestimmen, in welcher Zeitzone sich jemand. Zum Beispiel, angenommen, es ist Februar. Niemand ist auf die Sommerzeit. Jemand Zeitpläne etwas um 6 Uhr (Ortszeit) am 5. Mai. Sie sehen, der offset ist UTC-4. Wie wissen Sie, ob diese person in New Brunswick, die beobachtet DST (in dem Fall die Zeit gemeint 2100 UTC), oder Puerto Rico, die nicht (in dem Fall die Zeit gemeint 2200 UTC? Es ist eine knifflige Frage. Dieser Beitrag können einige helfen.
Wenn Sie möchten, verlassen sich auf javascript können Sie senden Sie einfach die utc-Zeit/Zeitstempel hin und her und lassen die client-konvertieren Sie es zu Ihrer lokalen Zeit-Darstellung.
edit: einfache Selbstversorger-Beispiel (mit jquery)
Wenn javascript ist nicht verfügbar, der Benutzer sieht immer noch ein Datum/Zeit-obwohl es in UTC.
edit2: Und es ist eine javascript-Bibliothek (oder war es sogar ein jquery-plugin?) das macht diese Art der Dinge plus einige nette Umbauten wie "vor einer Stunde", "Letzte Woche" ..sowas. Aber den Namen habe ich vergessen 🙁
Ich denke, dass ohne Kenntnis der genauen Zeitzone, Es gibt immer eine chance, die Sie verpassen einige obskure Regel.
Wie bei den meisten Themen Internationalisierung, dort eher obskuren Regeln, als Sie erwarten.
Ich würde allerdings gehen Sie für Eine option: "wählen Sie eine wahrscheinlich timezone mit den richtigen offset" genau, weil Zeitzone Zeug neigt dazu, komplizierter sein, als man erwarten würde. vor allem wenn man Sommer - /Winterzeit berücksichtigt. Wenn Sie sich für option A, Sie können die standard-Funktionen von PHP.
Könnte man dies in Kombination mit anderen Metriken, um die Verbesserung der Qualität der Vorhersage; zum Beispiel:
Kombination der oben genannten sollte Ihnen eine ziemlich vernünftige Schätzung. Aber 100% Sicherheit kann nicht erreicht werden.
Bitte sehen Sie sich auch diese alternative:
https://stackoverflow.com/a/12682439/1691517
Erkennt 90 Zeitzonen und hat 100% Genauigkeit bei der getesteten Plattformen.