Ich suche nach einer Funktion, um das Datum in einer Zeitzone in eine andere umzuwandeln.
Es braucht zwei Parameter,
- Datum (im Format "2012/04/10 10:10:30 +0000")
- Zeitzonenzeichenfolge ("Asia / Jakarta")
Die Zeitzonenzeichenfolge ist in http://en.wikipedia.org/wiki/Zone.tab beschrieben
Gibt es eine einfache Möglichkeit, dies zu tun?
javascript
timezone
Rizky Ramadhan
quelle
quelle
Antworten:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
quelle
toLocaleString
, aber dann zeigt sie sehr falsch die Rückgabe dieser Zeichenfolge an denDate
Konstruktor. Das verlangt nach Ärger. Der Datumszeichenfolgen-Parser muss keine länderspezifischen Formate akzeptieren, und die Eingabe wird so behandelt, als ob sie sich in der lokalen Zeitzone befindet. Tu das nicht. Verwenden Sie einfach die Zeichenfolgenausgabe des erstentoLocalString
Aufrufs.Für Benutzer von moment.js können Sie jetzt moment-timezone verwenden . Wenn Sie es verwenden, würde Ihre Funktion ungefähr so aussehen:
quelle
Date.prototype.toLocaleString
.Schamlos gestohlen von: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
Diese Funktion ist nützlich, um den Zeitzonenwert zu berechnen, indem der Name einer Stadt / eines Landes und der Versatzwert angegeben werden
quelle
Die meisten Desktop-Browser (nicht mobile Browser) außer Safari unterstützen die Funktion toLocaleString mit Argumenten. Ältere Browser ignorieren die Argumente normalerweise.
quelle
toLocaleStringSupportsLocales()
Implementierung, mit der Sie zuverlässig nach Unterstützung suchen können.Okay, habe es gefunden!
Ich benutze timezone-js . Das ist der Code:
quelle
Wenn Sie keine große Bibliothek importieren möchten, können Sie einfach Intl.DateTimeFormat verwenden , um Datumsobjekte in verschiedene Zeitzonen zu konvertieren.
Offsets, Sommerzeit und Änderungen in der Vergangenheit werden für Sie erledigt.
quelle
toLocaleString
hat eine inkonsistente Implementierung, und dies funktioniert ab IE11.formatter
Objekt zu erstellen , erhalten Sie: `` `Optionswert 'Asia / Jakarta' für 'timeZone' liegt außerhalb des gültigen Bereichs. Erwartet: ['UTC'] `` `Ich habs !
Wollte das angezeigte Datum erzwingen = Serverdatum, egal die lokalen Einstellungen (UTC).
Mein Server ist GMT-6 -> new Date (). GetTimezoneOffset () = 360.
quelle
Sie können die toLocaleString () -Methode zum Festlegen der Zeitzone verwenden.
Für Indien können Sie "Indian / Christmas" verwenden und die folgenden Zeitzonen sind:
quelle
toLocaleString
Lösung wurde bereits vor 4 Jahren gegeben .Wenn Sie nur Zeitzonen konvertieren müssen, habe ich eine abgespeckte Version der Moment-Zeitzone mit nur minimaler Funktionalität hochgeladen . Seine ~ 1KB + Daten:
quelle
Stellen Sie eine Variable ein, bei der Jahr, Monat und Tag durch '-' Symbole sowie ein 'T' und die Zeit im Muster HH: mm: ss getrennt sind, gefolgt von +01: 00 am Ende der Zeichenfolge (in meinem Fall die Zeitzone ist +1). Verwenden Sie dann diese Zeichenfolge als Argument für den Datumskonstruktor.
quelle
Ich sollte beachten, dass ich in Bezug auf die externen Bibliotheken, die ich verwenden kann, eingeschränkt bin. moment.js und timezone-js waren für mich KEINE Option.
Das js-Datumsobjekt, das ich habe, befindet sich in UTC. Ich musste das Datum UND die Uhrzeit von diesem Datum in einer bestimmten Zeitzone (in meinem Fall 'Amerika / Chicago') abrufen.
UTC ist derzeit 6 Stunden vor 'America / Chicago'. Ausgabe ist:
quelle
new Date();
Rückkehr lokale Zeitzone, nicht UTCIf no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Hier ist mein Code, er funktioniert perfekt. Sie können ihn mit der folgenden Demo ausprobieren:
quelle
currentDateTimeCentralTimeZone.getHours()
? Ohne das würde es funktionieren und ist dasselbe wie die Antwort von suche27 stackackflow.com/a/40809160/1404185Sie können dies auch für die Konvertierung der Datumszeitzone nach Indien versuchen:
quelle
Nachdem ich mich viel umgesehen hatte, einschließlich der Links von dieser Seite, fand ich diesen großartigen Artikel unter Verwendung der Moment-Zeitzone:
https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/
Um es zusammenzufassen:
Holen Sie sich die Zeitzone des Benutzers
Rückgabe zB: Zeitzone: Europa / London
Legen Sie die Standardzeitzone des Benutzers fest
Stellen Sie eine benutzerdefinierte Zeitzone ein
Konvertieren Sie Datum / Uhrzeit in die lokale Zeitzone, vorausgesetzt, das ursprüngliche Datum / die ursprüngliche Uhrzeit ist in UTC
Rückgabe: So, 25. Dezember 2016, 7:00 Uhr
Konvertieren Sie Datum / Uhrzeit in LA Time
Rückgabe: Sa, 24. Dezember 2016, 23:00 Uhr
Konvertieren Sie von LA Zeit nach London
Rückgabe: So, 25. Dezember 2016, 15:00 Uhr
quelle
Sie können auch verwenden https://www.npmjs.com/package/ctoc_timezone verwenden
Es hat viel einfache Implementierung und Formatanpassung.
Ändern des Formats in toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Ausgabe :
28th Feb 2013 19:00:00 EST
Sie können im Dokument mehrere Funktionen untersuchen.
quelle
Es gibt ein npm-Modul namens 'timezones.json', das Sie dafür verwenden können. Es besteht im Wesentlichen aus einer JSON-Datei mit Objekten, die Informationen zu Sommerzeit und Offset enthalten.
für asia / jakarta wäre es möglich, dieses objekt zurückzugeben:
Sie finden es hier:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
hoffe es ist nützlich
quelle
Leute, die mit dem Java 8-
java.time
Paket vertraut sind oderjoda-time
wahrscheinlich das neue Kind auf dem Block lieben werden: das js-joda Bibliothek.Installieren
Beispiel
In der wahren Java-Natur ist es ziemlich ausführlich lol. Da es sich jedoch um eine portierte Java-Bibliothek handelt, insbesondere wenn man bedenkt, dass sie 1800'-Testfälle portiert hat, funktioniert sie wahrscheinlich auch hervorragend genau.
Chrono-Manipulation ist schwer. Aus diesem Grund sind viele andere Bibliotheken in Randfällen fehlerhaft. Moment.js scheint die Zeitzonen richtig zu machen, aber die anderen js-Bibliotheken, die ich gesehen habe
timezone-js
, scheinen nicht vertrauenswürdig zu sein.quelle
Ich habe dies kürzlich in Typescript getan:
Ich verwende das "en-UK" -Format, weil es einfach ist. Könnte "en-US" gewesen sein oder was auch immer funktioniert.
Wenn das erste Argument Ihre Gebietsschema-Zeitzone und das zweite Ihre Zielzeitzone ist, wird ein Datumsobjekt mit dem richtigen Versatz zurückgegeben.
quelle
Ich hatte Probleme mit Moment Timezone . Ich füge diese Antwort nur hinzu, wenn jemand anderes vor dem gleichen Problem steht. Ich habe also eine Datumszeichenfolge
2018-06-14 13:51:00
von meinerAPI
. Ich weiß, dass dies in gespeichert istUTC
aber die Zeichenfolge spricht nicht für sich.Ich lasse Moment Zeitzone wissen, von welcher Zeitzone dieses Datum ist, indem ich tue:
Jetzt möchte ich es in eine bestimmte Zeitzone konvertieren, indem ich Folgendes mache:
quelle
Stellen Sie einfach die Zeitzone Ihres gewünschten Landes ein und Sie können die Aktualisierung mit der Funktion SetInteval () nach jeder Minute in HTML anzeigen. FunktionsformatAMPM () verwaltet das 12-Stunden-Format und die AM / PM-Zeitanzeige.
quelle
Ich kenne keine einfache Methode, um ein Datumsobjekt in eine Zeitzone zu konvertieren, aber wenn Sie es in die lokale Zeitzone konvertieren möchten, können Sie es einfach mit
Date.prototype.getTime()
der entsprechenden Anzahl von Millisekunden konvertieren und wieder zurück.Zum Beispiel
date.getHours()
wird jetzt zurückkehren,15
anstatt13
wenn Sie, wie ich, in Österreich sind (und es ist Sommer).Ich habe gelesen, dass die verschiedenen Datums- / Uhrzeitfunktionen in einigen Browsern möglicherweise ein nicht standardmäßiges Verhalten aufweisen. Testen Sie dies daher zuerst. Ich kann bestätigen, dass es in Chrome funktioniert.
quelle
Zeitzonenversatz für Ihre aktuelle Zeitzone
Für meine GMT + 10-Zeitzone (Australien) gab es -36000 zurück
quelle
Ein Ansatz kann darin bestehen, den Versatz für eine neue Zeitzone zu einem bestimmten Zeitpunkt zu berechnen.
Keine direkte Lösung für diese Frage, aber in meinem Anwendungsfall musste ich mit der resultierenden Zeit rechnen, was mit der String-Ausgabe nicht möglich war. Ich lasse die Funktion hier einfach für alle.
Dies ist nur die Kernlogik, die in Node und Major Modern Browsern funktioniert.
quelle
schneller und schmutziger manueller Stundenwechsler und Rückgabe:
quelle