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?

0voto

zerkotin Punkte 43

Ich weiß, dass es 3 Jahre zu spät ist, aber vielleicht kann es jemand anderem helfen, denn ich habe nichts dergleichen gefunden, außer der Moment-Zeitzonen-Bibliothek, die nicht genau dasselbe ist wie das, wonach er hier fragt.

Ich habe etwas Ähnliches für die deutsche Zeitzone gemacht, dies ist ein wenig komplex wegen der Sommerzeit und Schaltjahre, wo man 366 Tage hat.

es könnte ein wenig Arbeit mit der Funktion "isDaylightSavingTimeInGermany" nötig sein, da verschiedene Zeitzonen zu unterschiedlichen Zeiten die Sommerzeit ändern.

Wie auch immer, schauen Sie sich diese Seite an: https://github.com/zerkotin/german-timezone-converter/wiki

die wichtigsten Methoden sind: convertLocalDateToGermanTimezone convertGermanDateToLocalTimezone

Ich habe mir die Mühe gemacht, das zu dokumentieren, damit es nicht so verwirrend ist.

0voto

Greggory Wiley Punkte 392

Ich hatte das gleiche Problem wie OP, was mich auf diesen Thread und viele andere brachte. Keine der Antworten waren in der Lage, "initialisieren ein JavaScript Datum zu einer bestimmten Zeitzone".

Mein Szenario war ein Benutzer, der ein Datum und eine Zeitzone (für eine Besprechung) auswählt, also ob in Unix-Zeitstempel, oder UTC, usw., benötigt, dass dateTime in einer bestimmten Zeitzone zu sein, ohne den Offset von der lokalen Zeit des Benutzers zu wissen. Beispiel: Ein Benutzer in der Region ? muss eine Besprechung für 10:30 CST ansetzen, ohne die Abweichung von der Ortszeit zu kennen. Es ist erstaunlich schwierig, eine bestimmte Datumszeit von einer anderen Datumszeit aus festzulegen.

Die folgende Lösung instanziiert ein dateTime-Objekt in einer nicht lokalen Zeitzone oder konvertiert ein dateTime-Objekt in eine andere Zeitzone, wobei die ursprünglich eingestellte Zeit beibehalten wird. Es ist kompatibel mit allen modernen Browsern (und ziemlich weit zurück), tut nichts Fragwürdiges mit Browser-Apis und nimmt IANA-Datums-Strings auf.

    const setDateInAnotherTimeZone=(inputDateTime, timeZone)=>{
    /**
     * This funciton will instantiate a dateTime object in a non local timezone 
     * or
     * Converts a dateTime object to a different timezone, while maintining the time
     * Parameters
     ** inputDateTime, a date object with the desired time and day selected (in the local/non-desired timezone)
     *** Example: new Date(2023, 10, 10, 10, 30) 10:30 (localalized to user timezone) on 10/30/2023
     ** timeZone, the desired timezone you want to set the date in.
     *** Example: var timeZone = 'US/Central' 
     *** Requires a 'tz database time zone' name aka an IANA timezone name
     *** Usefull list here https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
     *** Date.prototype.toLocaleString() usng IANA time zone names is widely supported
     *** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString#browser_compatibility
     */
    console.log('desired Time Zone',timeZone) 
    console.log('desired Time     ', inputDateTime.toString().split(" ").slice(4,5).join(' ').toString()) 
    console.log('inputDateTime', inputDateTime) 

    const dateTZShifted = inputDateTime.toLocaleString("en-US", {timeZone : timeZone , dateStyle: 'long', timeStyle: 'long'})
    let timeTZShifted = dateTZShifted.split(" ").slice(4,5).join(' ').toString().split(':')
    var originalTime = inputDateTime.toString().split(" ").slice(4,5).join(' ').toString().split(':')
    let newLocalTime = [
        Number(originalTime[0]) - Number(timeTZShifted[0]) + Number(originalTime[0]) ,
        Number(originalTime[1]) - Number(timeTZShifted[1]) + Number(originalTime[1]) , 
        Number(originalTime[2]) -Number(timeTZShifted[2])  + Number(originalTime[2])
    ]
    let outputDate = new Date(inputDateTime)
    outputDate.setHours(Number(newLocalTime[0]), Number(newLocalTime[1]),Number(newLocalTime[2]))
    console.log('outputDateTime  ', outputDate.toLocaleString("en-US", {timeZone : timeZone , dateStyle: 'long', timeStyle: 'long'}) )
    return(outputDate)   
}
//Usage
let dateInAnotherTimeZone = setDateInAnotherTimeZone(new Date(2023, 7, 10, 10, 30),'US/Central')
let dateInAnotherTimeZone1 = setDateInAnotherTimeZone(DateObject,'America/New_York')

Erwartetes Ergebnis

gewünschte Zeitzone US/Central

gewünschte Zeit 10:30:00

inputDateTime

Thu Aug 10 2023 10:30:00 GMT-0400 (Eastern Daylight Time)

outputDateTime

August 10, 2023 um 10:30:00 AM CDT

o

Thu Aug 10 2023 11:30:00 GMT-0400 (Eastern Daylight Time)

-4voto

//For Mumbai time difference is 5.5 hrs so
city_time_diff=5.5; //change according to your city

let time_now = Date.now();
time_now = time_now + (3600000 * city_time_diff); //Add our city time (in msec);
let new_date = new Date(time_now);
console.log("My city time is: ", new_date);

-4voto

sandeep kumar Punkte 26

Hatte das gleiche Problem, benutzte dieses

Console.log(Date.parse("Jun 13, 2018 10:50:39 GMT+1"));

Es wird Millisekunden zurückgeben, auf die Sie überprüfen können, haben +100 timzone intialize britischen Zeit Hoffentlich hilft es!!

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