641 Stimmen

So initialisieren Sie ein JavaScript-Datum für eine bestimmte Zeitzone

Ich habe eine Datumszeit in einer bestimmten Zeitzone als Zeichenkette und möchte diese in die Ortszeit umwandeln. Aber ich weiß nicht, wie ich die Zeitzone im Date-Objekt einstellen kann.

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);  

Soviel ich weiß, kann ich entweder die UTC-Zeit oder die Ortszeit einstellen. Aber wie kann ich die Zeit in einer anderen Zeitzone einstellen?

Ich habe versucht, den Offset von UTC zu addieren/subtrahieren, aber ich weiß nicht, wie ich die Sommerzeit ausgleichen kann. Ich bin nicht sicher, ob ich die richtige Richtung eingeschlagen habe.

Wie kann ich über die Umwandlung von Zeit aus einer anderen Zeitzone in die lokale Zeit in Javascript gehen?

2voto

Shane K Punkte 4455

Aufbauend auf den obigen Antworten verwende ich diesen systemeigenen One-Liner, um die lange Zeitzonenzeichenfolge in eine Zeichenfolge mit drei Buchstaben zu konvertieren:

var longTz = 'America/Los_Angeles';
var shortTz = new Date().
    toLocaleString("en", {timeZoneName: "short", timeZone: longTz}).
    split(' ').
    pop();

Dies ergibt PDT oder PST, je nach dem angegebenen Datum. In meinem speziellen Anwendungsfall, der Entwicklung von Salesforce (Aura/Lightning), sind wir in der Lage, die Zeitzone des Benutzers im langen Format aus dem Backend zu erhalten.

2voto

Versuchen Sie es mit ctoc von npm. https://www.npmjs.com/package/ctoc_timezone

Es verfügt über einfache Funktionen zum Ändern von Zeitzonen (die meisten Zeitzonen um 400) und alle benutzerdefinierten Formate, die Sie anzeigen möchten.

1voto

Versuchen Sie so etwas,

public static getTimezoneOffset(timeZone: string, date = new Date()): number {
    const localDate = date.toLocaleString('fr', { timeZone, timeZoneName: 'long' });
    const tz = localDate.split(' ');
    const TZ = localDate.replace(tz[0], '').replace(tz[1], '').replace(' ', '');
    const dateString = date.toString();
    const offset = (Date.parse(`${dateString} UTC`) - Date.parse(`${dateString}${TZ}`)) / (3600 * 1000);
    return offset;
}

1voto

Bryce Rakop Punkte 41

Es gibt mehrere funktionierende Antworten hier, aber irgendwie eine Menge von ihnen schien, um Sie auf die Zeichenfolge zu erhalten, aber nicht zurück zu einem Datum-Objekt, das Sie mit gestartet, so hier ist meine einfache nicht-Funktion nehmen, wie man Zeitzone auf JS Datum ändern:

var TZ='Australia/Brisbane'; //Target timezone from server
var date = new Date();       //Init this to a time if you don't want current time
date=new Date(Date.parse(date.toLocaleString("en-US", {timeZone: TZ})));
//Just a clarification on what happens
// 1) First new Date() gives you a Date object at current time in the clients browser local timezone
// 2) .toLocaleString takes that time, and returns a string if time in the target timezone
// 3) Date.parse converts that new string to a Unix epoch number
// 4) new Date() converts the Unix epoch into a Date object in the new TimeZone. 
// Now I can use my usual getHours and other Date functions as required.

Ich hoffe, das hilft anderen (wenn Sie bis zu dieser unteren Antwort kommen!)

0voto

Meilech Punkte 403

Einfach mit Node.JS-Unterstützung

Geben Sie die Anzahl der Stunden ein, um die Ihre Zeitzone von der UTC abweicht

function initDateInTimezone(offsetHours) {
  const timezoneOffsetInMS = offsetHours * 60 * 60000;
  let d = new Date().getTimezoneOffset() * 60000 + timezoneOffsetInMS;
  const date = new Date(new Date().getTime() - d);
    return date
}

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