Es ist eigentlich gar nicht so schwer, dies zu tun, aber es ist sicherlich nicht intuitiv, die Lösung zu finden. Es gibt einige wirklich verworrene Antworten hier (obwohl auch einige schöne). Hier ist, was ich mir ausgedacht habe, um sicherzustellen, dass meine Server-Zeitstempel mit meinen lokalen Zeitstempeln übereinstimmen, egal in welcher Zeitzone sich mein bereitgestellter Server befindet.
(MEZ = Mitteleuropäische Zeitzone, die zufällig meine persönliche Zeitzone ist; Sie können den Offset einer beliebigen Zeitzone ermitteln und berechnen und sogar als Argument verwenden, wenn Sie möchten, aber für meinen Zweck musste ich nur meine Daten in die gewünschte einheitliche Zeitzone bringen).
const convertDateToCET = function(date) {
date = new Date(date)
// let startTime = date.getTime();
const cetOffset = -120; // this is the number you get from running
// `(new Date()).getTimezoneOffset()` if you're on a machine in CET
const offsetFromCET = (date.getTimezoneOffset() - cetOffset);
const cetMillsecondOffset = ( cetOffset* 60 * 1000);
date = new Date( date.getTime() - cetMillsecondOffset )
// let endTime = date.getTime()
// console.log("updated date from",startTime,"to",endTime)
return date;
},
Damit stellen Sie einfach eine Zeit ein, wie Sie es erwarten würden, z. B.
let myDate = new Date("12-4-2021")
myDate.setHour(14)
myDate.setMinute(30)
// now myDate is 2:30pm, December 4th, 2021, in whatever the timezone the machine of code running happens to be in
myDate = convertDateToCET(myDate)
// now myDate will show up as 2:30pm, Dec 4th, 2021, mapped into your local timezone
// so, if you're in the UK, and one hour behind CET, myDate is now 1:30pm, Dec 4th, 2021
Der Schlüssel dazu ist date.getTimezoneOffset()
. Wenn Sie tatsächlich in der Weiterbildung sind, wird diese Zahl sein -120
und hebt sich somit auf, so dass es keinen Unterschied macht (CET ergibt also CET out). Wenn Sie sich im Vereinigten Königreich befinden, eine Stunde hinter der MEZ, würde die Ausgabe lauten -60
was bedeutet -60 + 120 = +60
was dazu führt, dass wir die Eingabezeit um eine Stunde ändern, und so weiter .
In einem solchen Fall wäre es wahrscheinlich sinnvoller, alles in UTC zu konvertieren und zu verwenden, aber da meine gesamte Eingabezeit in MEZ ist und ich das System ursprünglich auf der Grundlage der lokalen Gegebenheiten auf meinem Rechner entwickelt hatte, konnte ich mit diesem Dienstprogramm den vorhandenen Code konvertieren, indem ich diese Funktion an einigen wichtigen Stellen aufrief.
Vorsicht! Achten Sie darauf, dass Sie diesen Funktionsaufruf nicht mehrmals am selben Tag anwenden, da Sie sonst den Offset mehrfach anwenden, was ihn verfälscht!
22 Stimmen
Wenn die akzeptierte Antwort Sie zwar in die richtige Richtung führt, aber Ihre Frage nicht beantwortet, sollte sie meiner Meinung nach nicht die akzeptierte Antwort sein. Die Antwort sollte die gestellte Frage beantworten.