Wie konvertiert man mal richtig über Zeitzonen hinweg?
Sagen wir mal der Benutzer in CA, US holt ein Datum, Zeit und Zeitzone:
Weltweiten Bier-marathon startet am 8/15/2013 10:00 Uhr, UTC-08:00
Einem anderen Benutzer, in Mitteleuropa öffnet sich die Seite, wo das Datum und die Uhrzeit angezeigt wird. Er will nicht zu tun, Zeit-Berechnungen (hatte paar Bier schon). Er will einfach nur, um zu sehen, das Datum und die Zeit:
8/15/2013 19:00
Gegeben, der browser erhält dann die Datums-und Zeit-Informationen, eingegeben durch den Benutzer in Kalifornien:
Gibt es eine Möglichkeit, in javascript, ohne externe web-services, um eine korrekte Konvertierung? Das ist, um zu erkennen, dass 10 Uhr UTC-08:00 Uhr sollte eigentlich 10 Uhr UTC-07:00, denn es ist Sommerzeit.
Vielleicht habe ich etwas falsch verstanden von dieser von Anfang an, aber ich will nicht zu lassen, die Eingabe der user zu überlegen, ob er wählen sollten, UTC-08:00 (PST) oder UTC-07:00 (PDT). Ich gehe davon aus, dass da die standard-Zeitzone in CA PST-Datei ist, die Leute wechseln nicht zu denken in der PDT im Sommer. Oder tun Sie das?!
In Mitteleuropa, standard-Datum ist in UTC+01:00, Daylight Saving Datum UTC+02:00. Also, der Unterschied zwischen Kalifornien und Europa werden sollten, 9 Stunden, mit Ausnahme von zwei Perioden in einem Jahr, wenn der eine oder andere Gebiet wechselt zwischen Standard-und Sommerzeit-Modus.
Update:
Nach etwas mehr denken und Lesen die Kommentare, was würde ich im Idealfall benötigen, ist dies:
var utcOffset = f('2013-08-15T10:00', 'America/Los_Angeles');
//utcOffset == "-07:00"
var utcOffset = f('2013-11-15T10:00', 'America/Los_Angeles');
//utcOffset == "-08:00"
So weit, es sieht aus wie die moment.js/timezone-plugin, vorgeschlagen von Guido Preite ist in der Lage, dies zu tun (mehr oder weniger).
Andere Weise mit browser-APIs?
Moment.js
und Moment Timezone
momentjs.com/timezoneIch benutze moment.js schon. Die Zeitzone Erweiterung sieht vielversprechend aus. Die generierten Zeitzonen-Datei enthält die Sommerzeit conversion-Daten. Nach einer schnellen Prüfung, es war in der Lage, richtig passen Sie die Zeit eingegeben. So sieht dies wie Browser sind nicht in der Lage zu sagen "hey, für dieses Datum müssen Sie das UTC-offset da zu diesem Zeitpunkt, es ist Sommer-Zeit"?
InformationsquelleAutor rdamborsky | 2013-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
10:00-8 und 10:00-7 sind zwei verschiedene Momente in der Zeit. Sie sind gleich um 18:00Z und 17:00Z bzw. (Z = UTC). Wenn Sie Messen in Bezug auf einen offset der Sommerzeit nicht ins Bild. Je.
Im Allgemeinen, die Menschen denken in "Pacific Time", und das bedeutet, dass beide PST im winter, und der PDT im Sommer. Aber Computer sind präziser. Wenn Sie sehen, PST, es heißt UTC-8. Wenn Sie sehen, PDT, es bedeutet UTC-7. Es wäre ungültig-Etikett mit einer form, während gleichzeitig die Bezugnahme auf den Abstand des anderen.
Zeit zone Abkürzungen kann mehrdeutig sein. Ideal, wenn auf die zone programmgesteuert verwenden, sollten Sie die IANA-zone Namen, wie
America/Los_Angeles
. Dies ist jedoch derzeit nicht möglich, in allen JavaScript-runtimes ohne eine Bibliothek. (Sie arbeiten auf diese aber.)Richtig. Sie könnte entweder 8, 9 oder 10 Stunden auseinander. Wechseln Sie zu völlig verschiedenen Zeiten, obwohl, so versuchen Sie nicht zu verwalten diese selbst.
Moment-Zeitzone ist eine große Bibliothek. Aber von dem Szenario, das Sie beschrieben, ich glaube nicht, dass Sie sich sorgen machen müssen Zeit-zone, Konvertierung, so viel wie Sie denken. Sehen Sie, wenn Sie können dieser Logik Folgen:
Lesen Sie das textbox-Wert in einen string, und analysieren Sie diese in ein Datum:
oder mit moment.js:
Weil das geschehen auf dem computer des Benutzers, JavaScript wird automatisch angenommen, dass dies ein lokalen Datum und Uhrzeit. Sie brauchen nicht, um alle offset-oder Zeit-zone Informationen.
Bedeutet dies, dass wegen der zeitumstellungen, dass die Zeit eingegeben werden möglicherweise ungültig oder nicht eindeutig sind. JavaScript macht das nicht so einen tollen job bei der Handhabung, dass in der Tat - Sie werden unterschiedliche Ergebnisse erhalten, die auf verschiedenen Browsern. Wenn Sie wollen eindeutig sein, dann geben Sie einen offset.
Sobald Sie eine
Date
(oder einmoment
), dann können Sie beurteilen seine UTC-äquivalent:es ist das gleiche mit moment.js aber Sie haben eine bessere browser-Unterstützung:
Speichern Sie das UTC-Wert in Ihre Datenbank.
Andere user in Mitteleuropa kommt zusammen und lädt die Daten.
Füttern Sie es in einem
Date
odermoment
in JavaScript:oder mit moment.js (wieder eine bessere browser-Unterstützung)
Weil JavaScript kennt die Regeln der Zeitzone des lokalen Computers ist, können Sie jetzt anzeigen, das Datum, und es wird die Mitteleuropäische Zeit-zone:
oder mit moment.js Sie können die Ausgabe-format besser
könnte man auch lassen moment.js entscheiden Sie, was lokalisierten format ausgegeben werden soll:
Zusammenfassen - wenn Sie interessiert sind, nur die Konvertierung in und aus der lokalen Zeitzone (egal welche zone), dann kann man es nur mit
Date
. Moment.js macht die Dinge einfacher für die Analyse und Formatierung, aber es ist nicht unbedingt erforderlich.Gibt es nur wenige Szenarien, die erfordern ein Zeit-zone Bibliothek (wie moment-Zeitzone oder andere).
Die Sie konvertieren möchten, oder eine zone, die nicht die lokale Zeitzone oder UTC.
Arbeiten Sie mit Daten, die in der Vergangenheit und es wurde eine änderung der Regeln der Zeitzone oder Sommerzeit-Regeln, da dann und Sie haben Termine, die würden unterschiedlich interpretiert werden nach den neuen Regeln als mit den alten. Das ist ein bisschen technisch, aber es kann passieren. Lesen Sie mehr hier und hier.
Ich werde sagen, dass es ist lächerlich, dass javascript, die Programmierung der Sprache des "world wide web" nicht in der Zeit gebaut Umwandlung / timezone-tools
InformationsquelleAutor Matt Johnson
Default-Konstruktor erzeugt die Instanz der lokalen Zeit
Kann ich nicht testen Sie es jetzt, aber Sie sollten in der Lage sein, um Ihr datetime (als parameter an den Konstruktor übergeben)..
..und dann sollten Sie in der Lage sein zu rufen, Datum, Objekt-Funktionen wie getMonth gibt Daten in die lokale Zeitzone. Wie geschrieben: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Anmerkung 1: Ohne server = es gibt keine server - |db überhaupt? Wenn es ist, das Datum sollte gespeichert werden als UTC in die db und lade es als lokale Zeit für jeden Benutzer.. so dass Sie nicht haben, um sorgen Konvertierungen.
Note2: Diese Frage hat einige code zeigt, wie man der Zeitzone Unterschied: Wie man die genaue lokale Zeit des client?
InformationsquelleAutor Damb
Entwickelte ich diese Lösung basiert auf andere Beispiele...hoffe, das funktioniert für Sie! Verfügbar auf jsfiddle.
InformationsquelleAutor Mohammad