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

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

J'exécute 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 est: 10/16/2013 1:31 PM, mais je suis finir avec 10/17/2013 9:31 AM

23
demandé sur Neil 2014-01-15 21:37:24

2 réponses

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 comme UTC par rapport à l'heure locale.

18
répondu Neil Kistner 2014-01-15 18:04:30

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
répondu Asa Carter 2014-07-22 09:41:47