【发布时间】:2019-03-19 09:28:17
【问题描述】:
我有以下使用 Moment.js 的 JavaScript 代码。
const time = "Thu Nov 01 2018 00:00:00 GMT-0400";
const momentTime = moment(time, "ddd MMM DD YYYY HH:mm:ss GMT-ZZ");
console.log(momentTime.toString()); // Thu Nov 01 2018 00:00:00 GMT-0600
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
问题是我希望以下值彼此相等(它们目前不是):
-
time(Thu Nov 01 2018 00:00:00 GMT-0400) -
momentTime.toString()(Thu Nov 01 2018 00:00:00 GMT-0600)
我希望 momentTime.toString() 等于 Wed Oct 31 2018 22:00:00 GMT-0600(如果我的数学计算正确的话)。
看起来它只是出于某种原因错误地解析了该时区或 GMT 偏移量。
根据Moment.js parsing documentation,我应该可以使用ZZ 将其解析为正确的时区。
知道我在这里做错了什么吗?
【问题讨论】:
-
您的问题是解析时的时区令牌。用“ZZ”代替“GMT-ZZ”。
-
@RobG 成功了!随时留下答案,我会投票并接受。我认为我需要
GMT-ZZ的原因是因为在文档中它以Offset from UTC as +-HH:mm, +-HHmm, or Z为例。真的把我绊倒了,因为我认为它只会解析-0400而不是GMT-0400。谢谢!! -
是的,文档意味着 ZZ 代表整个时区字符串,而不仅仅是 HH:mm 部分。 :-) 我认为它将“GMT-ZZ”视为无效令牌并忽略它。
-
Moment 使用方括号来转义标记,所以如果你想明确一点,可以使用
[GMT]ZZ。除非您打开严格模式,否则解析不是必需的,但可能需要以任何一种方式格式化输出。
标签: javascript date time timezone momentjs