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?

434voto

Udhaya Punkte 4627

Hier ist der Einzeiler:

function convertTZ(date, tzString) {
    return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));   
}

// usage: Asia/Jakarta is GMT+7
convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta") // Tue Apr 20 2012 17:10:30 GMT+0700 (Western Indonesia Time)

// Resulting value is regular Date() object
const convertedDate = convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta") 
convertedDate.getHours(); // 17

// Bonus: You can also put Date object to first arg
const date = new Date()
convertTZ(date, "Asia/Jakarta") // current date-time in jakarta.

Dies ist die MDN-Referenz .

Achtung: Die obige Funktion funktioniert, indem sie sich auf das Ergebnis von toLocaleString verlässt, das eine Zeichenkette mit einem Datum ist, das in en-US Gebietsschema, z.B. "4/20/2012, 5:10:30 PM" . Jeder Browser akzeptiert möglicherweise nicht en-US formatierte Datumszeichenfolge an den Date-Konstruktor übergeben, und es kann ein unerwartetes Ergebnis zurückgegeben werden (z. B. wird die Sommerzeit ignoriert).

Derzeit akzeptieren alle modernen Browser dieses Format und berechnen die Sommerzeit korrekt, bei älteren und/oder exotischen Browsern funktioniert es möglicherweise nicht.

Nebenbemerkung: Es wäre toll, wenn moderne Browser toLocaleDate haben Funktion haben, so dass wir nicht diese hacky Arbeit herum verwenden müssen.

149voto

lambinator Punkte 10045

Die meisten Browser Unterstützung der toLocaleString Funktion mit Argumenten, ignorieren ältere Browser in der Regel die Argumente.

const str = new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' });
console.log(str);

144voto

Brian Di Palma Punkte 6499

Für moment.js Benutzer können Sie jetzt Moment-Zeitzone . Damit würde Ihre Funktion etwa so aussehen:

function toTimeZone(time, zone) {
    var format = 'YYYY/MM/DD HH:mm:ss ZZ';
    return moment(time, format).tz(zone).format(format);
}

100voto

Valli69 Punkte 7400

Schamlos gestohlen von: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329

/** 
 * function to calculate local time
 * in a different city
 * given the city's UTC offset
 */
function calcTime(city, offset) {

    // create Date object for current location
    var d = new Date();

    // get UTC time in msec
    var utc = d.getTime();

    // create new Date object for different city
    // using supplied offset
    var nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time in " + city + " is " + nd.toLocaleString();
}

diese Funktion ist nützlich, um den Wert der Zeitzone zu berechnen, indem man den Namen einer Stadt/eines Landes und den Offset-Wert angibt

55voto

Rizky Ramadhan Punkte 6576

Okay, ich habe es gefunden!

を使っています。 timezone-js . das ist der Code:

var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");

console.debug(dt); //return formatted date-time in asia/jakarta

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