【问题标题】:momentjs convert datetime to UTC from another timezonemomentjs 将日期时间从另一个时区转换为 UTC
【发布时间】:2016-09-28 19:10:38
【问题描述】:

我有如下日期:

2014 年 5 月 30 日上午 11:21:37

我的用户将输入该数据并拥有自己的时区。它可能是“美国/东部”、“美国/太平洋新”等。我想将时间转换为 UTC,但我做不到。有办法吗?

我正在使用节点,我尝试了 momentJS 并阅读以下内容:

http://momentjs.com/docs/

http://momentjs.com/guides/

Convert date to another timezone in JavaScript

如何从不同的时区转换为 UTC?

编辑

我试过这些:

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

在上面的例子中dateString 是字符串日期。我想将时区设置为“美国/东部”并将其转换为 UTC。

【问题讨论】:

  • 如果您要投反对票,请解释原因。我显然为此尝试了很多东西。

标签: node.js momentjs


【解决方案1】:
// 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"

请注意,我使用了与输入格式相同的输出格式 - 如果您愿意,可以改变它。

如果您愿意,也可以在一行中完成所有操作:

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

另外,请注意,我使用的是区域/位置格式 (America/New_York),而不是旧的 US/Eastern 样式。这应该是首选,因为 US/* 只是为了向后兼容。

另外,永远不要使用US/Pacific-New。现在它和US/Pacific 一样,都只是指向America/Los_Angeles。有关此历史的更多信息,请see the tzdb sources

【讨论】:

  • 嗨@Matt mon问题是我没有字符串格式的输入日期,而是UTC格式的输入日期,并且时刻或任何函数都可以将其转换为字符串,我总是像11月1日星期三那样转换为字符串2017 12:22:04 GMT+0100 (CET),有什么想法吗?
  • @stackdave - 我不明白你的评论。它似乎与这里的问题无关。请在新问题中提出支持详细信息。
  • 经过两天的奋斗。这个解决方案对我有用。非常感谢@MattJohnson-Pint
【解决方案2】:

非常类似于@Matt的回答;但使用 moment-timezone 将日期时间转换为 UTC(作为 ISO 字符串):

var momentTz = require('moment-timezone');
var utcDate = momentTz.tz('2021-01-27 14:02:45', "YYYY-MM-DD HH:mm:ss", 'Asia/Kolkata').toISOString();
console.log(utcDate);

// output: '2021-01-27T08:32:45.000Z'

我正在使用所需的 UTC 和 ISO 格式的日期时间的 api

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2012-08-06
    • 2013-04-07
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多