Wie zum initialisieren einer JavaScript Datum auf eine bestimmte Zeitzone
Habe ich Datum, Zeit in einer bestimmten Zeitzone als string, und ich will wandeln diese in die lokale Zeit. Aber, ich weiß nicht, wie die Zeitzone in der Date-Objekt.
Ich habe zum Beispiel Feb 28 2013 7:00 PM ET,
dann kann ich
var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);
Soweit ich weiß, kann ich entweder die UTC-Zeit oder lokale Zeit. Aber, wie kann ich die Uhrzeit in einer anderen Zeitzone?
Ich habe versucht, verwenden Sie die add/subtract offset von UTC, aber ich weiß nicht, wie counter Sommerzeit. Bin nicht sicher, ob ich in die richtige Richtung.
Wie kann ich mich über die Umwandlung von Zeit aus einer anderen Zeitzone an die lokale Zeit in javascript?
InformationsquelleAutor pavanred | 2013-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hintergrund
JavaScript
Date
Objekt verfolgt Uhrzeit im UTC-intern, aber in der Regel akzeptiert ein-und Ausgang in der lokalen Zeit des Computers läuft es auf. Es muss nicht jede Einrichtung für die Arbeit mit der Zeit in anderen Zeitzonen. Es kann analysieren und output-Daten, die UTC oder die Lokale, aber es kann nicht direkt mit anderen Zeitzonen.Absolut präzise, die interne Darstellung einer
Date
Objekt ist eine einzelne Zahl, die die Anzahl von Millisekunden, die vergangen sind, seit1970-01-01 00:00:00 UTC
, ohne Berücksichtigung von Schaltsekunden. Es gibt keine Zeitzone oder string-format gespeichert, in dem Date-Objekt selbst. Wenn sich verschiedene Funktionen derDate
Objekt verwendet werden, die computer ' s local time zone angewendet wird, um die interne Darstellung. Wenn die Funktion liefert einen string, dann wird der computer das Gebietsschema-Informationen können berücksichtigt werden, um zu bestimmen, wie zu produzieren, dass die Zeichenfolge. Die details sind je nach Funktion, und einige sind von der Implementierung abhängig.Bibliotheken
Glücklicherweise gibt es Bibliotheken, die verwendet werden, um die Arbeit mit Zeitzonen. Obwohl Sie immer noch nicht die
Date
Objekt Verhalten sich anders, Sie in der Regel die Umsetzung der Norm Olson/IANA Zeitzone-Datenbank und bieten Funktionen für die Verwendung in JavaScript. Einigen Aufwand haben, wenn Sie in einem Webbrowser ausgeführt werden, da die Datenbank kann man ein bisschen groß, wenn Sie wollen, die ganze Sache. Glücklicherweise sind viele dieser Bibliotheken können Sie selektiv wählen Sie die Zonen, die Sie wollen, zu unterstützen, wodurch die Größe der Daten viel schmackhafter. Auch einige Einsatz moderner features, um die Zeitzone Daten aus derIntl
API anstatt das Schiff selbst.Gibt es mehrere Bibliotheken, für das, dass ich mir bewusst bin:
Maximale Laufzeit-js(eingestellt)Luxon ist wahrscheinlich die sicherste Wette für alle modernen Sprachgebrauch, und ist das leichteste Gewicht, da Sie mit dem
Intl
API für Ihre Zeitzone-Daten.Moment-timezone ist eine Erweiterung moment.js, und bringt seine eigenen Zeitzone-Daten.
js-joda ist eine JavaScript-Umsetzung der Joda-Time-API (von Java) und beinhaltet die Unterstützung von Zeitzonen durch ein separates Modul.
Datum-fns-tz ist eine Erweiterung für Datum-fns 2.x. Datum-fns-timezone ist eine Erweiterung für Datum-fns 1.x.
BigEasy/Zeitzone erscheint auch auf dem richtigen Weg.
Maximale Laufzeit-js Ende-von-Leben, und die Besitzer sind Migration zu moment-Zeitzone.
TimeZoneJS rund um den längsten, aber bekannt ist, haben einige langjährige Fehler, besonders in der Nähe der Sommerzeit übergänge. Hoffentlich werden diese Feste an einem gewissen Punkt in der Zukunft.
tz.js hat auch schon für einige Zeit, aber nicht sehr gut dokumentiert, IMHO.
Sollten Sie bewerten, diese Bibliotheken zu finden, welches Ihren Bedürfnissen gerecht wird. Wenn Sie unsicher sind, gehen mit dem Augenblick/moment-Zeitzone.
Native Unterstützung in Modernen Umgebungen
Wenn Sie können beschränken Sie Ihre Verwendung zu modernen Umgebungen, Sie können nun Folgendes tun, ohne spezielle Bibliotheken:
Dies ist keine umfassende Lösung, aber es funktioniert für viele Szenarien, die diese benötigen nur output-Konvertierung (von der UTC-Zeit oder als lokale Zeit auf eine bestimmte Zeit-zone, aber nicht die andere Richtung). Dies ist Teil der ECMAScript-Internationalisierungs-API (ECMA-402). Sehen dieser Beitrag für mehr details. Dieses Kompatibilitäts-Tabelle tracks, welche Versionen werden unterstützt. Dies ist die
Intl
API bereits erwähnt, dass bestimmte Bibliotheken verwenden jetzt intern.(Klar zu sein, diese nicht initialisieren einer
Date
Objekt, sondern kann verwendet werden, anwenden Zeit-zone, bei der Produktion ein bestimmtes Gebietsschema als string.)Zukunft Vorschläge
Den TC39 Zeitlichen Vorschlag zielt darauf ab, eine neue Reihe von standard-Objekten für die Arbeit mit Datumsangaben und Uhrzeiten in der JavaScript-Sprache selbst. Dies schließt die Unterstützung für ein Zeit-zone bewusst-Objekt.
Ich habe neu in diesem, und bin mit Ihnen einverstanden. Aktualisiert meine Antwort entsprechend.
Wenn Sie dies tun, in der Firebug-Konsole:
var date_time = new Date()
, den Wert vondate_time
ist (für mich AEST)Date {Sun Aug 21 2016 22:18:47 GMT+1000 (AEST)}
und so, also es scheint Sie hat gespeichert Zeitzone. Wie kann ich sicherstellendate_time
ist rein die UTC-Zeit ohne Zeitzone eingefügt?Hmm, nach dieser Antwort (stackoverflow.com/a/8047885/1063287), ist es so:
new Date().getTime();
Methode verwendet die host-timezone offset zu produzieren, ein Datum und die Uhrzeit der lokalen Zeitzone. Das date-Objekt selbst hat einen Wert, ist ein offset von 1970-01-01T00:00:00Z, also effektiv UTC. Sehen Sie die UTC-Datum und Uhrzeit, toISOString.
InformationsquelleAutor Matt Johnson
Können Sie angeben, Zeitzonen-offset auf
new Date()
zum Beispiel:oder
Seit
Date
speichern die UTC-Zeit ( d.h.getTime
zurück in UTC ), javascript wird Ihnen konvertieren Sie die Zeit in UTC, und wenn Sie rufen Dinge wietoString
javascript konvertiert die UTC-Zeit in den browser die lokale Zeitzone und den string in die lokale Zeitzone, d.h. Wenn ich mitUTC+8
:Du kannst auch normale
getHours/Minute/Second
Methode:( Diese
8
bedeutet nach der Zeit umgewandelt wird, in meinem lokalen Zeit -UTC+8
die Stunden Zahl ist8
. )Die Beispiele in diesem Kommentar Häufig nicht in internet explorer arbeiten. Wie bereits im vorherigen Kommentar zu diesem post, ISO 8601 ist wichtig. Ich bestätigte, durch das Lesen der ECMA-262 (Javascript 5.) edition language-Spezifikation.
InformationsquelleAutor maowtm
Als Matt Johnson sagte,
So, obwohl der browser nicht Lesen können IANA Zeitzonen bei der Erstellung ein Datum, oder hat keine Methoden zum ändern der Zeitzonen auf einem vorhandenen Datum-Objekt, scheint es einen hack um ihn herum:
Nutzung
es ist ein ziemlich neuer post. um ehrlich zu sein, ich erstaunt mich, Wann es mir auffiel, Sie könnte verwenden
toLocaleString
zu erreichen die umgekehrte Wirkung, und ja, das sollte allgemein bekannt sein ! gehen Sie schreiben einen Artikel über Sie und mich erwähnen 🙂Die einzige schlechte Sache über dieses ist die browser-Unterstützung von toLocaleString() 🙁
Für einen node-Umgebung ist nicht in GMT bereits, den oben genannten code ändern muss von var invdate = new Date(Datum.toLocaleString('de-de', { Zeitzone: ianatz })); in var invdate = new Date(${Datum.toLocaleString('de-de', { Zeitzone: ianatz })} GMT`);
InformationsquelleAutor commonpike
ich weiß, Ihr 3 Jahre zu spät, aber vielleicht kann es helfen, jemand anderes, weil ich havnt gefunden, was wie, dass, außer für den moment-timezone-Bibliothek, die nicht genau das gleiche wie das, was hes Frage für hier.
ive getan etwas ähnliches für Deutsche Zeitzone
dies ist ein wenig Komplex, da die Sommerzeit und Schaltjahre, wo Sie haben 366 Tage.
müssen Sie möglicherweise ein wenig Arbeit mit der "isDaylightSavingTimeInGermany" - Funktion, während verschiedene Zeitzonen ändern, auf die verschiedenen Zeiten der Sommerzeit.
sowieso, schauen Sie sich diese Seite:
https://github.com/zerkotin/german-timezone-converter/wiki
die wichtigsten Methoden sind:
convertLocalDateToGermanTimezone
convertGermanDateToLocalTimezone
ive ein Aufwand in die Dokumentation, damit es nicht so verwirrend ist.
InformationsquelleAutor zerkotin
Ich lief in ein ähnliches problem mit unit-tests (speziell im Scherz, wenn die unit-tests lokal ausführen, zum erstellen der snapshots und dann das CI-server läuft (möglicherweise) zu einer anderen Zeitzone wodurch die snapshot-Vergleich to fail"). Ich verspottet unsere
Date
und einige der unterstützenden Methoden, wie das so ist:InformationsquelleAutor JRulle
Fand ich die meisten unterstützten Weg, dies zu tun, ohne sich Gedanken über eine Drittanbieter-Bibliothek, wurde durch die Verwendung
getTimezoneOffset
zu berechnen, die entsprechenden Zeitstempel, oder aktualisieren Sie die Zeit dann benutzen Sie die normalen Methoden, um die erforderliche Datum und die Zeit.BEARBEITEN
War ich früher mit
UTC
Methoden bei der Durchführung der Datum-Transformationen, die war falsch. Mit dem hinzufügen von offset zu der Zeit, mit der lokalenget
Funktionen liefern die gewünschten Ergebnisse.timezone_offset
?Oops, ich mislabeled eine meiner Variablen.
timezone_offset
hätteoffset
oder Umgekehrt. Ich habe bearbeitet meine Antwort zu zeigen, die richtige variable name.InformationsquelleAutor Shaun Cockerill
Versuchen Sie es mit ctoc von npm.
https://www.npmjs.com/package/ctoc_timezone
Er hat die einfache Funktion zum ändern von Zeitzonen (die meisten Zeitzonen rund 400) und alle benutzerdefinierten Formate, die u wollen, dass es zur Anzeige.
InformationsquelleAutor Sandeep Chowdary
Versuchen: Datum-von-Zeitzone, löst er erwartet das Datum mit Hilfe der nativ verfügbar
Intl.DateTimeFormat
.Ich habe diese Methode in einem meiner Projekte seit paar Jahren schon, aber jetzt habe ich mich entschlossen, es zu veröffentlichen, als kleine OS-Projekt 🙂
InformationsquelleAutor Mariusz Nowak
War vor dem gleichen Problem, diese
Konsole.log(Datum.parse("Jun 13, 2018 10:50:39 GMT+1"));
Zurück Millisekunden, um die u überprüfen können, haben +100 timzone intialize britische Zeit
Hoffe, es hilft!!
InformationsquelleAutor sandeep kumar
Hintergrund
JavaScript
Date
Objekt verfolgt Uhrzeit im UTC-intern, aber in der Regel akzeptiert ein-und Ausgang in der lokalen Zeit des Computers läuft es auf. Es muss nicht jede Einrichtung für die Arbeit mit der Zeit in anderen Zeitzonen. Es kann analysieren und output-Daten, die UTC oder die Lokale, aber es kann nicht direkt mit anderen Zeitzonen.Absolut präzise, die interne Darstellung einer
Date
Objekt ist eine einzelne Zahl, die die Anzahl von Millisekunden, die vergangen sind, seit1970-01-01 00:00:00 UTC
, ohne Berücksichtigung von Schaltsekunden. Es gibt keine Zeitzone oder string-format gespeichert, in dem Date-Objekt selbst. Wenn sich verschiedene Funktionen derDate
Objekt verwendet werden, die computer ' s local time zone angewendet wird, um die interne Darstellung. Wenn die Funktion liefert einen string, dann wird der computer das Gebietsschema-Informationen können berücksichtigt werden, um zu bestimmen, wie zu produzieren, dass die Zeichenfolge. Die details sind je nach Funktion, und einige sind von der Implementierung abhängig.Bibliotheken
Glücklicherweise gibt es Bibliotheken, die verwendet werden, um die Arbeit mit Zeitzonen. Obwohl Sie immer noch nicht die
Date
Objekt Verhalten sich anders, Sie in der Regel die Umsetzung der Norm Olson/IANA Zeitzone-Datenbank und bieten Funktionen für die Verwendung in JavaScript. Einigen Aufwand haben, wenn Sie in einem Webbrowser ausgeführt werden, da die Datenbank kann man ein bisschen groß, wenn Sie wollen, die ganze Sache. Glücklicherweise sind viele dieser Bibliotheken können Sie selektiv wählen Sie die Zonen, die Sie wollen, zu unterstützen, wodurch die Größe der Daten viel schmackhafter. Auch einige Einsatz moderner features, um die Zeitzone Daten aus derIntl
API anstatt das Schiff selbst.Gibt es mehrere Bibliotheken, für das, dass ich mir bewusst bin:
Maximale Laufzeit-js(eingestellt)Luxon ist wahrscheinlich die sicherste Wette für alle modernen Sprachgebrauch, und ist das leichteste Gewicht, da Sie mit dem
Intl
API für Ihre Zeitzone-Daten.Moment-timezone ist eine Erweiterung moment.js, und bringt seine eigenen Zeitzone-Daten.
js-joda ist eine JavaScript-Umsetzung der Joda-Time-API (von Java) und beinhaltet die Unterstützung von Zeitzonen durch ein separates Modul.
Datum-fns-tz ist eine Erweiterung für Datum-fns 2.x. Datum-fns-timezone ist eine Erweiterung für Datum-fns 1.x.
BigEasy/Zeitzone erscheint auch auf dem richtigen Weg.
Maximale Laufzeit-js Ende-von-Leben, und die Besitzer sind Migration zu moment-Zeitzone.
TimeZoneJS rund um den längsten, aber bekannt ist, haben einige langjährige Fehler, besonders in der Nähe der Sommerzeit übergänge. Hoffentlich werden diese Feste an einem gewissen Punkt in der Zukunft.
tz.js hat auch schon für einige Zeit, aber nicht sehr gut dokumentiert, IMHO.
Sollten Sie bewerten, diese Bibliotheken zu finden, welches Ihren Bedürfnissen gerecht wird. Wenn Sie unsicher sind, gehen mit dem Augenblick/moment-Zeitzone.
Native Unterstützung in Modernen Umgebungen
Wenn Sie können beschränken Sie Ihre Verwendung zu modernen Umgebungen, Sie können nun Folgendes tun, ohne spezielle Bibliotheken:
Dies ist keine umfassende Lösung, aber es funktioniert für viele Szenarien, die diese benötigen nur output-Konvertierung (von der UTC-Zeit oder als lokale Zeit auf eine bestimmte Zeit-zone, aber nicht die andere Richtung). Dies ist Teil der ECMAScript-Internationalisierungs-API (ECMA-402). Sehen dieser Beitrag für mehr details. Dieses Kompatibilitäts-Tabelle tracks, welche Versionen werden unterstützt. Dies ist die
Intl
API bereits erwähnt, dass bestimmte Bibliotheken verwenden jetzt intern.(Klar zu sein, diese nicht initialisieren einer
Date
Objekt, sondern kann verwendet werden, anwenden Zeit-zone, bei der Produktion ein bestimmtes Gebietsschema als string.)Zukunft Vorschläge
Den TC39 Zeitlichen Vorschlag zielt darauf ab, eine neue Reihe von standard-Objekten für die Arbeit mit Datumsangaben und Uhrzeiten in der JavaScript-Sprache selbst. Dies schließt die Unterstützung für ein Zeit-zone bewusst-Objekt.
var date_time = new Date()
, den Wert vondate_time
ist (für mich AEST)Date {Sun Aug 21 2016 22:18:47 GMT+1000 (AEST)}
und so, also es scheint Sie hat gespeichert Zeitzone. Wie kann ich sicherstellendate_time
ist rein die UTC-Zeit ohne Zeitzone eingefügt?new Date().getTime();
private double date
ist der einzige Instanz-Feld. Alles andere ist statisch, und vor allem gibt es für caching-Umgebung zur Verfügung gestellt Werten. Es ist nicht etwas, das verfolgt pro Instanz, oder etwas, das Sie ändern können, ganz einfach.Date.UTC
Funktion ist das berechnen der timestamp, basierend auf der UTC-Eingänge ist alle. Die Ausgabe von.toString()
wird die lokale Zeit entspricht, und zeigt die local time zone offset, name oder Abkürzung.Als Matt Johnson sagte,
So, obwohl der browser nicht Lesen können IANA Zeitzonen bei der Erstellung ein Datum, oder hat keine Methoden zum ändern der Zeitzonen auf einem vorhandenen Datum-Objekt, scheint es einen hack um ihn herum:
Nutzung
toLocaleString
zu erreichen die umgekehrte Wirkung, und ja, das sollte allgemein bekannt sein ! gehen Sie schreiben einen Artikel über Sie und mich erwähnen 🙂Können Sie angeben, Zeitzonen-offset auf
new Date()
zum Beispiel:oder
Seit
Date
speichern die UTC-Zeit ( d.h.getTime
zurück in UTC ), javascript wird Ihnen konvertieren Sie die Zeit in UTC, und wenn Sie rufen Dinge wietoString
javascript konvertiert die UTC-Zeit in den browser die lokale Zeitzone und den string in die lokale Zeitzone, d.h. Wenn ich mitUTC+8
:Du kannst auch normale
getHours/Minute/Second
Methode:( Diese
8
bedeutet nach der Zeit umgewandelt wird, in meinem lokalen Zeit -UTC+8
die Stunden Zahl ist8
. )ich weiß, Ihr 3 Jahre zu spät, aber vielleicht kann es helfen, jemand anderes, weil ich havnt gefunden, was wie, dass, außer für den moment-timezone-Bibliothek, die nicht genau das gleiche wie das, was hes Frage für hier.
ive getan etwas ähnliches für Deutsche Zeitzone
dies ist ein wenig Komplex, da die Sommerzeit und Schaltjahre, wo Sie haben 366 Tage.
müssen Sie möglicherweise ein wenig Arbeit mit der "isDaylightSavingTimeInGermany" - Funktion, während verschiedene Zeitzonen ändern, auf die verschiedenen Zeiten der Sommerzeit.
sowieso, schauen Sie sich diese Seite:
https://github.com/zerkotin/german-timezone-converter/wiki
die wichtigsten Methoden sind:
convertLocalDateToGermanTimezone
convertGermanDateToLocalTimezone
ive ein Aufwand in die Dokumentation, damit es nicht so verwirrend ist.
Ich lief in ein ähnliches problem mit unit-tests (speziell im Scherz, wenn die unit-tests lokal ausführen, zum erstellen der snapshots und dann das CI-server läuft (möglicherweise) zu einer anderen Zeitzone wodurch die snapshot-Vergleich to fail"). Ich verspottet unsere
Date
und einige der unterstützenden Methoden, wie das so ist:Fand ich die meisten unterstützten Weg, dies zu tun, ohne sich Gedanken über eine Drittanbieter-Bibliothek, wurde durch die Verwendung
getTimezoneOffset
zu berechnen, die entsprechenden Zeitstempel, oder aktualisieren Sie die Zeit dann benutzen Sie die normalen Methoden, um die erforderliche Datum und die Zeit.BEARBEITEN
War ich früher mit
UTC
Methoden bei der Durchführung der Datum-Transformationen, die war falsch. Mit dem hinzufügen von offset zu der Zeit, mit der lokalenget
Funktionen liefern die gewünschten Ergebnisse.timezone_offset
?timezone_offset
hätteoffset
oder Umgekehrt. Ich habe bearbeitet meine Antwort zu zeigen, die richtige variable name.Versuchen Sie es mit ctoc von npm.
https://www.npmjs.com/package/ctoc_timezone
Er hat die einfache Funktion zum ändern von Zeitzonen (die meisten Zeitzonen rund 400) und alle benutzerdefinierten Formate, die u wollen, dass es zur Anzeige.
Versuchen: Datum-von-Zeitzone, löst er erwartet das Datum mit Hilfe der nativ verfügbar
Intl.DateTimeFormat
.Ich habe diese Methode in einem meiner Projekte seit paar Jahren schon, aber jetzt habe ich mich entschlossen, es zu veröffentlichen, als kleine OS-Projekt 🙂
War vor dem gleichen Problem, diese
Konsole.log(Datum.parse("Jun 13, 2018 10:50:39 GMT+1"));
Zurück Millisekunden, um die u überprüfen können, haben +100 timzone intialize britische Zeit
Hoffe, es hilft!!