Moment Js UTC zur Ortszeit


145

Ich versuche, die UTC-Zeit in die Ortszeit umzuwandeln. Ich habe dieses Beispiel über diesen Link verfolgt: http://jsfiddle.net/FLhpq/4/light/ . Ich kann anscheinend nicht die richtige lokale Ausgabe erhalten. Zum Beispiel, wenn es hier 10:30 Uhr ist, anstatt 10:30 Uhr krank zu werden, 15:30 Uhr. Hier ist mein Code:

var date = moment.utc().format('YYYY-MM-DD HH:mm:ss');

var localTime  = moment.utc(date).toDate();

localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');

console.log("moment: " + localTime);

Egal was ich mache, die Zeit kommt immer zur UTC-Zeit heraus. Ich lebe in Houston und weiß, dass die Zeitzone das Problem ist. Ich habe den Code im Link befolgt, kann aber die Ortszeit anzeigen. Was mache ich falsch?

Antworten:


237

Um die UTC-Zeit in Lokal umzuwandeln, müssen Sie verwenden moment.local().

Weitere Informationen finden Sie in den Dokumenten

Beispiel:

var date = moment.utc().format('YYYY-MM-DD HH:mm:ss');

console.log(date); // 2015-09-13 03:39:27

var stillUtc = moment.utc(date).toDate();
var local = moment(stillUtc).local().format('YYYY-MM-DD HH:mm:ss');

console.log(local); // 2015-09-13 09:39:27

Demo:

var date = moment.utc().format();
console.log(date, "- now in UTC"); 

var local = moment.utc(date).local().format();
console.log(local, "- UTC now to local"); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


16
hat bei mir nicht funktioniert, die Zeit ist immer noch 5 Stunden vor der Zeit meines Browers, was richtig ist
Brian Scroggins

Wenn momentjs die lokale Zeitzone kennt, gibt es eine Möglichkeit, sie abzurufen, oder wird moment.tz.guess () benötigt, um dies zu tun?
jEremyB

@jEremyB, moment().format('Z')und moment().format('ZZ')kann Ihnen helfen. Schauen Sie sich auch an, (new Date()).getTimezoneOffset()vielleicht ist es genug für Ihren Fall
Axon

@brianScroggins, vergessen Sie nicht .utc(date). Im ersten Teil kann die Zeile var local = ..., die sie nicht hat, irreführend sein.
Jocelyn

62

Versuche dies:

let utcTime = "2017-02-02 08:00:13";

var local_date= moment.utc(utcTime ).local().format('YYYY-MM-DD HH:mm:ss');

3
Die Angabe der Zone, in der es gespeichert wurde, hat bei mir funktioniert (diese Antwort). Außerdem wird festgestellt, dass es das Leben einfacher macht, wenn Sie Dinge immer in utc speichern und dann auf der Clientseite formatieren.
Juan Pablo Ugas

1
Dies hat in meinem Fall funktioniert, in dem wir die Zeit in UTC in unserer Datenbank speichern und nur die Ortszeit auf dem Client anzeigen. Vielen Dank.
Alex Ehlert

18
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

Versuchen Sie diese JsFiddle


2
Das funktioniert gut, aber warum gibt .local () nicht das gleiche Ergebnis zurück?
Steve

Diese Geige gibt das folgende Ergebnis auf meinem Computer zurück: 02/02/2017 8:00 AM (UTC-Zeit) 02/02/2017 10:00 AM (Ortszeit) 02/02/2017 9:00 AM (Ortszeit auf andere Weise )
Steve

3

Hinweis: Bitte aktualisieren Sie das Datumsformat entsprechend.

Format Datum

   __formatDate: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('D-MMM-Y');
   }

Zeit formatieren

  __formatTime: function(myDate){
      var ts = moment.utc(myDate);
      return ts.local().format('HH:mm');
  },

3

Um UTC in Ortszeit umzuwandeln

let UTC = moment.utc()
let local = moment(UTC).local()

Oder Sie möchten direkt die Ortszeit erhalten

let local = moment()

var UTC = moment.utc()
console.log(UTC.format()); // UTC time

var cLocal = UTC.local()
console.log(cLocal.format()); // Convert UTC time

var local = moment();
console.log(local.format()); // Local time
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


0

Ich habe eine Funktion erstellt, die alle Zeitzonen in Ortszeit konvertiert.

Bedarf:

1. npm i moment-timezone

function utcToLocal(utcdateTime, tz) {
    var zone = moment.tz(tz).format("Z") // Actual zone value e:g +5:30
    var zoneValue = zone.replace(/[^0-9: ]/g, "") // Zone value without + - chars
    var operator = zone && zone.split("") && zone.split("")[0] === "-" ? "-" : "+" // operator for addition subtraction
    var localDateTime
    var hours = zoneValue.split(":")[0]
    var minutes = zoneValue.split(":")[1]
    if (operator === "-") {
        localDateTime = moment(utcdateTime).subtract(hours, "hours").subtract(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else if (operator) {
        localDateTime = moment(utcdateTime).add(hours, "hours").add(minutes, "minutes").format("YYYY-MM-DD HH:mm:ss")
    } else {
        localDateTime = "Invalid Timezone Operator"
    }
    return localDateTime
}

utcToLocal("2019-11-14 07:15:37", "Asia/Kolkata")

//Returns "2019-11-14 12:45:37"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.