web-dev-qa-db-fra.com

Moment.Js: décalage des dates à l'aide de l'UTC et du décalage de fuseau horaire

J'essaie d'ajuster une heure en utilisant un décalage de fuseau horaire et un horodatage UTC.

J'utilise le code suivant:

var date = {
    utc: '2013-10-16T21:31:51',
    offset: -480
}

var returnDate = moment(date.utc).utc().zone(date.offset).format('MM/DD/YYYY h:mm A');

Ce que j'attends c'est: 10/16/2013 1:31 PM mais je me retrouve avec 10/17/2013 9:31 AM

23
Neil

Voici ce qui a fonctionné pour moi:

var date = {
  utc: '2013-10-16T21:31:51',
  offset: 480
}

var returnDate = moment.utc(date.utc).zone(date.offset).format('MM/DD/YYYY h:mm A');

Si vous avez remarqué, j'ai changé le décalage en un nombre positif. Cela a donné le résultat souhaité. Si le décalage a été laissé à -480 la sortie était 10/17/2013 5:31 AM.

Il existe une méthode moment # UTC qui initialise la date en UTC par rapport à l'heure locale.

19
Neil Kistner

J'utilise la bibliothèque jsTimezoneDetect pour déterminer le nom du fuseau horaire au lieu du décalage.

Ensuite, utilisez ceci sur un horodatage UTC:

timestamp = moment.tz(timestamp, tz.name());
timestamp.format('MM/DD/YYYY h:mm A');
2
Asa Carter