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?

0voto

Zubair Rizwan Punkte 11

Es gibt ein Serverproblem, das die Standardzeitzone gmt+0000 auswählt. Sie können sie ändern, indem Sie die Bibliothek moment-timezone in javascript verwenden

const moment = require("moment-timezone")
const dateNew = new Date()
const changeZone = moment(dateNew);
changeZone.tz("Asia/Karachi").format("ha z");
// here you can paste "your time zone string"

0voto

John Punkte 5822

Ein bisschen redundant mit all diesen Antworten, aber dies funktionierte für mich für den Erhalt der aktuellen Date-Objekt mit einem bestimmten stündlichen Offset.

 function hourToMs(hour)
    {
        return hour * 60 * 1000 * 60;
    }

    function minToMs(min)
    {
        return min * 60 * 1000;
    }

    function getCurrentDateByOffset(offset)
    {
        // Get the current timezone in milliseconds to reset back to GMT aka +0
        let timezoneOffset = minToMs((new Date()).getTimezoneOffset());

        // get the desired offset in milliseconds, invert the value because javascript is dum
        let desiredOffset = hourToMs(offset * -1);

        return new Date(Date.now() + timezoneOffset - desiredOffset);
    }

    // -6 hours is central timezone
    console.log("The time is: " + getCurrentDateByOffset(-6));

0voto

Amir Punkte 69

Dies ist für mich in React Native Application gearbeitet.

import moment from 'moment-timezone'

function convertTZ(date, tzString) {
  const formatedDate = moment(date).tz(tzString).format()
  return formatedDate
}

export {convertTZ}

0voto

Lee Punkte 1

Das sollte für jeden funktionieren. Sie können verschiedene Zeitzonen ausprobieren, indem Sie die Zeit auf Ihrem Rechner manuell ändern. Die Funktion wird sich entsprechend anpassen.

 function getCurrentTime() {
     const d = new Date() //2022-07-22T16:27:21.322Z
     const t = d.getTime(); //d in milliseconds 1658507241322
     const offset = -d.getTimezoneOffset()/60 //current offset in hours -4
     const curretMilli = t + (offset * 3600000) //cuuret local time milliseconds need to convert offset to milliseconds
     return new Date(curretMilli) //converts current local time in milliseconds to a Date //2022-07-22T12:27:21.322Z
 }

0voto

goat Punkte 30238

Personen, die mit dem Java 8 java.time Paket, oder joda-time werden wahrscheinlich das neue Kind im Block lieben: die js-joda Bibliothek.

Installieren Sie

npm install js-joda js-joda-timezone --save

Exemple

<script src="node_modules/js-joda/dist/js-joda.js"></script>
<script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script>
<script>
var dateStr = '2012/04/10 10:10:30 +0000';
JSJoda.use(JSJodaTimezone);
var j = JSJoda;
// https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern
var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss xx'));
var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of('America/New_York'));
console.log(zonedDateTime.toString(), '=>', adjustedZonedDateTime.toString());
// 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York]
</script>

Wie es sich für Java gehört, ist es ziemlich ausführlich lol. Aber, wobei eine portierte Java-Bibliothek, vor allem wenn man bedenkt, dass sie 1800'ish Testfälle portiert, es funktioniert wahrscheinlich auch hervorragend genau.

Chrono-Manipulation ist schwer. Deshalb sind auch viele andere Bibliotheken in Grenzfällen fehlerhaft. Moment.js scheint Zeitzonen richtig zu bekommen, aber die anderen js-Bibliotheken, die ich gesehen habe, einschließlich timezone-js scheinen nicht vertrauenswürdig zu sein.

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