web-dev-qa-db-fra.com

momentjs convertit datetime en UTC à partir d'un autre fuseau horaire

J'ai des dates comme ci-dessous:

30/05/2014 11:21:37 AM

Mes utilisateurs entreront ces données et auront leur propre fuseau horaire. Cela pourrait être quelque chose comme "US/Eastern", "US/Pacific-New", etc. Je veux convertir l'heure en UTC mais je ne peux pas. Y a-t-il un moyen de le faire?

J'utilise node et j'ai essayé momentJS et j'ai lu ce qui suit:

http://momentjs.com/docs/

http://momentjs.com/guides/

Convertir la date en un autre fuseau horaire en JavaScript

Comment convertir un fuseau horaire différent en UTC?

Modifier

J'ai essayé ces derniers:

moment().utc(0).format('YYYY-MM-DD HH:mm Z')
moment.tz(dateString, "US/Eastern").format()

Dans l'exemple ci-dessus, dateString est la date de la chaîne. Je veux définir le fuseau horaire sur "US/Eastern" et le convertir en UTC.

13
KVISH
// your inputs
var input = "05/30/2014 11:21:37 AM"
var fmt   = "MM/DD/YYYY h:mm:ss A";  // must match the input
var zone  = "America/New_York";

// construct a moment object
var m = moment.tz(input, fmt, zone);

// convert it to utc
m.utc();

// format it for output
var s = m.format(fmt)  // result: "05/30/2014 3:21:37 PM"

Notez que j'ai utilisé le même format de sortie que le format d'entrée - vous pouvez le modifier si vous le souhaitez.

Vous pouvez également le faire en une seule ligne si vous préférez:

var s = moment.tz(input, fmt, zone).utc().format(fmt);

De plus, notez que j'ai utilisé le format Zone/Localité (America/New_York), au lieu de l'ancien US/Eastern style. Cela devrait être préféré, car les États-Unis/* sont juste là pour des raisons de compatibilité descendante.

Aussi, US/Pacific-New ne doit jamais être utilisé. C'est maintenant la même chose que US/Pacific, qui pointent tous deux vers America/Los_Angeles. Pour en savoir plus sur l'histoire de cela, voir les sources tzdb .

23