519 Stimmen

Erzeugen eines Datums mit einer bestimmten Zeitzone ohne Verwendung einer String-Darstellung

Ich habe eine Webseite mit drei Dropdown-Listen für Tag, Monat und Jahr. Wenn ich das JavaScript verwende Date Konstruktor, der Zahlen annimmt, dann erhalte ich eine Date Objekt für meine aktuelle Zeitzone:

new Date(xiYear, xiMonth, xiDate)

Geben Sie das richtige Datum an, aber aufgrund der Sommerzeit wird dieses Datum für GMT+01:00 gehalten.

Das Problem dabei ist, dass ich dann diese Date an eine Ajax-Methode, und wenn das Datum auf dem Server deserialisiert wird, wurde es in GMT umgewandelt und hat dadurch eine Stunde verloren, wodurch sich der Tag um eine Stunde nach hinten verschiebt. Jetzt könnte ich nur den Tag, Monat und Jahr einzeln in die Ajax-Methode übergeben, aber es scheint, dass es einen besseren Weg sein sollte.

Die akzeptierte Antwort wies mich in die richtige Richtung, aber nur mit setUTCHours() von selbst verändert:

Apr 5th 00:00 GMT+01:00 

まで

Apr 4th 23:00 GMT+01:00

Dann musste ich auch noch das UTC-Datum, den Monat und das Jahr einstellen, um am Ende Folgendes zu erhalten

Apr 5th 01:00 GMT+01:00

was ich auch wollte.

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.

1voto

Victor Félix Punkte 21
const date = new Date("2020-12-16 17:45:00 UTC");

Funktioniert gut.

1voto

Zubair Rizwan Punkte 11

Sie können die Bibliothek verwenden, um die Zeitzone zu ändern

moment-timezone

var moment = require("moment-timezone");
const today = new Date();
var timeGet = moment(today);
timeGet.tz("Asia/Karachi").format("ha z");

dies kann Ihre Zeitzone Ihrer Region ändern fügen Sie Ihre Region Bereich und erhalten echte gmt + Problem zu lösen

Für weitere Informationen besuchen Sie moment timezone offizielle Dokumentation

0 Stimmen

Könnten Sie der Antwort auf die Frage nach der Zeitzone eine kurze Erklärung und einen Link hinzufügen?

1voto

Dies funktionierte problemlos für verschiedene Zeitzonen (IST, PST, Mexiko, Mittelamerika):

let dateUtc: any = new Date(Date.parse(data.details.dateOfBirth));

dateUtc = new Date(dateUtc.getTime() + Math.abs(dateUtc.getTimezoneOffset()*60000));

console.log(dateUtc);

0voto

Piosek Punkte 228

Wenn Sie den Zeitunterschied zwischen zwei Daten prüfen möchten, können Sie einfach prüfen, ob die zweite Zeitzone kleiner oder größer als die erste gewünschte Zeitzone ist, und eine Zeit subtrahieren oder addieren.

  const currTimezone = new Date().getTimezoneOffset(); // your timezone
  const newDateTimezone = date.getTimezoneOffset(); // date with unknown timezone

  if (currTimezone !== newDateTimezone) {
    // and below you are checking if difference should be - or +. It depends on if unknown timezone is lesser or greater than yours
    const newTimezone = (currTimezone - newDateTimezone) * (currTimezone > newDateTimezone ? 1 : -1);
    date.setTime(date.getTime() + (newTimezone * 60 * 1000));
  }

0voto

Rafael Xavier Punkte 837

GMT -03:00 Beispiel

new Date(new Date()-3600*1000*3).toISOString();  // 2020-02-27T15:03:26.261Z

Oder sogar

now  = new Date().getTime()-3600*1000*3; // 1582818380528
data = new Date(now).toISOString();      // 2020-02-27T15:03:26.261Z

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