Momento Js UTC all'ora locale


145

Sto cercando di convertire l'ora UTC nell'ora locale. Ho seguito questo esempio da questo link: http://jsfiddle.net/FLhpq/4/light/ . Non riesco a ottenere il giusto output locale. Ad esempio, se sono le 10:30 qui, invece di ammalarsi alle 10:30 prendi le 15:30. Ecco il mio codice:

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);

Non importa quello che faccio, l'ora viene sempre all'ora UTC. Vivo a Houston, quindi so che il problema è il fuso orario. Ho seguito il codice nel link ma sembra che riesca a ottenere l'ora locale. Che cosa sto facendo di sbagliato?

Risposte:


239

Per convertire l'ora UTC in locale devi usare moment.local().

Per maggiori informazioni vedi documenti

Esempio:

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
non ha funzionato per me, il tempo è ancora 5 ore avanti rispetto al tempo dei miei browser, il che è corretto
Brian Scroggins,

se momentjs è a conoscenza del fuso orario locale, c'è un modo per recuperarlo o è moment.tz.guess () necessario per farlo?
jEremyB,

@jEremyB moment().format('Z')e moment().format('ZZ')può aiutarti. Inoltre, dai un'occhiata a (new Date()).getTimezoneOffset()forse è abbastanza per te
assone

@brianScroggins, assicurati di non dimenticare .utc(date). Nella prima parte, la linea che var local = ...non la possiede può essere fuorviante.
Jocelyn

62

Prova questo:

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

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

3
Specificare la zona in cui è stato salvato ha funzionato per me (questa risposta). Inoltre, ho scoperto che semplifica la vita se salvi sempre le cose in utc e poi le formatti sul lato client.
Juan Pablo Ugas,

1
Questo ha funzionato nel mio caso in cui stiamo risparmiando il tempo in UTC nel nostro db e visualizzando solo l'ora locale sul client. Grazie.
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");

Prova questo JsFiddle


2
Funziona alla grande ma perché .local () non restituisce lo stesso risultato?
Steve,

questo violino restituisce il seguente risultato sul mio computer: 02/02/2017 8:00 (ora UTC) 02/02/2017 10:00 (ora locale) 02/02/2017 9:00 (ora locale in altro modo )
Steve,

3

Nota: aggiornare il formato della data di conseguenza.

Data di formattazione

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

Formato ora

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

3

Per convertire UTC in ora locale

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

Oppure vuoi ottenere direttamente l'ora locale

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

Ho creato una funzione che converte tutti i fusi orari in ora locale.

Requisiti:

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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.