514 Stimmen

Datum in eine andere Zeitzone in JavaScript konvertieren

Ich bin auf der Suche nach einer Funktion, mit der ich das Datum einer Zeitzone in eine andere umwandeln kann.

Es werden zwei Parameter benötigt,

  • Datum (im Format "2012/04/10 10:10:30 +0000")
  • Zeitzone string ("Asien/Jakarta")

Die Zeitzonenzeichenfolge wird beschrieben in http://en.wikipedia.org/wiki/Zone.tab

Gibt es eine einfache Möglichkeit, dies zu tun?

45voto

Endless Punkte 28715

Wenn Sie keine große Bibliothek importieren wollen, können Sie einfach Intl.DateTimeFormat um Datumsobjekte in verschiedene Zeitzonen zu konvertieren.

// Specifying timeZone is what causes the conversion, the rest is just formatting
const options = {
  year: '2-digit', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  timeZone: 'Asia/Jakarta',
  timeZoneName: 'short'
}
const formatter = new Intl.DateTimeFormat('sv-SE', options)
const startingDate = new Date("2012/04/10 10:10:30 +0000")

const dateInNewTimezone = formatter.format(startingDate) 
console.log(dateInNewTimezone) // 12-04-10 17:10:30 GMT+7

Zeitverschiebungen, Sommerzeit und Änderungen in der Vergangenheit werden für Sie übernommen.

UPDATE

Außerdem gibt es diese neue Zeitliche das unter anderem Zeitzonen verwaltet. Zum Beispiel nur Daten oder nur Zeit. Es ist derzeit noch experimentell

Es soll das alte Erbe ersetzen Date

var isoDate = new Date().toJSON() // eg: '2022-11-18T13:56:09.697Z'
Temporal.Instant.from(isoDate).toZonedDateTimeISO('Europe/Stockholm')

13voto

Cedric Simon Punkte 4425

Ich hab's!

Wollte die angezeigtes Datum \= Serverdatum unabhängig von den lokalen Einstellungen (UTC).

Mein Server ist GMT-6 --> new Date().getTimezoneOffset() = 360

myTZO = 360;
myNewDate = new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO)));
alert(myNewDate);

7voto

Codemaker Punkte 7272

Sie können die Methode toLocaleString() verwenden, um die Zeitzone festzulegen.

new Date().toLocaleString('en-US', { timeZone: 'Indian/Christmas' })

Für Indien können Sie "Indisch/Weihnachten" verwenden, und im Folgenden sind die verschiedenen Zeitzonen aufgeführt,

"Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"

4voto

Gerson Diniz Punkte 798

Verwendung von luxon Bibliothek:

import { DateTime } from "luxon";

// Convert function:
const convertTz = (datetime, fromTz, toTz, format='yyyy-MM-dd HH:mm:ss') => {
  return DateTime.fromFormat(datetime, format, { zone: fromTz }).setZone(toTz).toFormat(format);
}

// Use it like this:
console.log(convertTz('2021-10-03 19:00:00', 'Europe/Lisbon', 'America/New_York'));

3voto

Setzen Sie eine Variable mit year , month y day getrennt mit - Symbole, sowie ein T und die Zeit in HH:mm:ss Muster, gefolgt von +01:00 am Ende der Zeichenkette (in meinem Fall ist die Zeitzone +1 ). Verwenden Sie dann diese Zeichenfolge als Argument für den Datums-Konstruktor.

// desired format: 2001-02-04T08:16:32+01:00
dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00";

var date = new Date(dateAndTime );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X