Moment Js UTC en heure locale

145

J'essaye de convertir l'heure UTC en heure locale. J'ai suivi cet exemple à partir de ce lien: http://jsfiddle.net/FLhpq/4/light/ . Je n'arrive pas à obtenir la bonne sortie locale. Par exemple, s'il est 10 h 30 ici, au lieu de 10 h 30 malade, prenez 15 h 30. Voici mon 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);

Peu importe ce que je fais, l'heure sort toujours à l'heure UTC. Je vis à Houston, donc je sais que le fuseau horaire est le problème. J'ai suivi le code dans le lien, mais je peux sembler obtenir l'heure locale. Qu'est-ce que je fais mal?

Brian Scroggins
la source

Réponses:

239

Pour convertir l'heure UTC en local, vous devez utiliser moment.local().

Pour plus d'informations, consultez la documentation

Exemple:

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

Démo:

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>

axone
la source
16
n'a pas fonctionné pour moi, l'heure a encore 5 heures d'avance sur l'heure de mes navigateurs, ce qui est correct
Brian Scroggins
si momentjs connaît le fuseau horaire local, y a-t-il un moyen de le récupérer ou est-ce que moment.tz.guess () est nécessaire pour le faire?
jEremyB
@jEremyB, moment().format('Z')et moment().format('ZZ')peut vous aider. Aussi, jetez un œil à (new Date()).getTimezoneOffset()peut-être que c'est suffisant pour votre cas
axon
@brianScroggins, assurez-vous de ne pas oublier .utc(date). Dans la première partie, la ligne var local = ...ne l'ayant pas peut être trompeuse.
Jocelyn le
62

Essaye ça:

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

var local_date= moment.utc(utcTime ).local().format('YYYY-MM-DD HH:mm:ss');
JAMZAD
la source
3
Spécifier la zone dans laquelle il a été enregistré a fonctionné pour moi (cette réponse). De plus, cela facilite la vie si vous enregistrez toujours les choses au format utc puis au format côté client.
Juan Pablo Ugas
1
Cela a fonctionné dans mon cas où nous économisons l'heure en UTC dans notre base de données et n'afficherons que l'heure locale sur le client. Merci.
Alex Ehlert le
18
let utcTime = "2017-02-02 08:00:13.567";
var offset = moment().utcOffset();
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT");

Essayez ce JsFiddle

Abdur Rahim
la source
2
Cela fonctionne très bien mais pourquoi .local () ne renvoie-t-il pas le même résultat?
Steve
ce violon renvoie le résultat suivant sur mon ordinateur: 02/02/2017 8:00 AM (Heure UTC) 02/02/2017 10:00 AM (Heure locale) 02/02/2017 9:00 AM (Heure locale d'une autre manière )
Steve
3

Remarque: veuillez mettre à jour le format de la date en conséquence.

Date de format

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

Format de l'heure

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

Pour convertir UTC en heure locale

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

Ou vous voulez obtenir directement l'heure 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>

Brady Huang
la source
0

J'ai créé une fonction qui convertit tous les fuseaux horaires en heure locale.

Exigences:

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
la source