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:
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.
// 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 .