Moment.js - 世界上任何地方,使用相同的时区

时间:2018-02-15 23:07:23

标签: javascript timezone momentjs

我发现了其他一些帖子,但他们并没有找到我想要的东西。

以下是该方案:

中国的用户(虽然它可能位于世界上任何地方)将日期时间输入到代表美国当地时间的字段中。所以即使他们的本地计算机可能是在2011年2月1日上午1:11北京,该用户将于2014年2月14日上午11:11在德克萨斯州奥斯汀市进入日期时间字段。

这是我从输入字段中提取的字符串: '2018-02-14T11:11'

如何使用moment.js确保当我将'2018-02-14T11:11'转换为UTC时,UTC字符串总是反映奥斯汀时间,而不是北京时间?在一天结束时,我们不知道用户来自哪个时区,但我们始终知道输入的时区将处于中央标准时间。

以下似乎正在发生的事情是,当我使用它们转换为UTC时,日期仍然没有反映CST,或者它们被错误地偏移了几个小时。

moment('2018-02-14T11:11').zone("America/Chicago").format()

moment('2018-02-14T11:11').tz("America/Chicago").format()

moment('2018-02-14T11:11', 'CST').tz("America/Chicago").format()

moment('2018-02-14T11:11', "America/Chicago").tz("America/Chicago").format()

到UTC:

moment.utc('2018-02-14T11:11').tz("America/Chicago").toISOString()

我确实错过了一些东西。任何建议将不胜感激!

提前致谢!

2 个答案:

答案 0 :(得分:2)

你关闭了 - 你将需要Moment-Timezone插件,然后就是这样:

TFDMemTable

让我们打破这一点:

moment.tz('2018-02-14T11:11', "America/Chicago").utc().format()

答案 1 :(得分:0)

只需添加我得到的另一种情况:

解析'2018-02-14Z',但忽略'Z'(UTC),仅使用本地时区或指定的时区。

您可以简单地从字符串中删除'Z'或执行以下操作:

moment('2018-02-14Z', 'YYYY-MM-DD')将忽略'Z'或任何不匹配的字符。

moment.tz('2018-02-14Z', 'YYYY-MM-DD', 'America/Chicago')将使用给定的时区。

当然,您首先不应该这样做。应该使用正确的时区。