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?

Brian Scroggins
quelle

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>

Axon
quelle
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');
JAMZAD
quelle
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

Abdur Rahim
quelle
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');
  },
Fung LAM
quelle
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>

Brady Huang
quelle
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"
Rohit Parte
quelle