MomentJs 和时区缩写

use*_*608 5 momentjs

我在使用 momentjs 库时遇到问题

线

moment("Mon Oct 14 01:00:00 GMT 2013")  parses correctly 
Run Code Online (Sandbox Code Playgroud)

但这条线

moment("Mon Oct 14 01:00:00 BST 2013")  throws an invalid date
Run Code Online (Sandbox Code Playgroud)

我已经尝试构建一个格式字符串,但我认为我需要的 zz 格式已被弃用,有没有办法让它完全跳过 BST/GMT 位,因为我只对日期感兴趣

提前致谢。

Mat*_*int 3

时区缩写不是唯一的,因此无法解析。您可以通过将任何非格式字符作为占位符来忽略它:

moment("Mon Oct 14 01:00:00 BST 2013","ddd MMM DD HH:mm:ss ? YYYY")
Run Code Online (Sandbox Code Playgroud)

但您应该意识到,如果忽略它,您将假设运行代码的计算机的本地时区。将您的计算机设置为另一个时区并调用.format()它,您就会明白我的意思。

也许您不关心时区,只想将其重新格式化为其他内容。这很好,但是如果您提供的日期由于计算机本地时区的夏令时转换而无效,该怎么办?您的浏览器将向后或向前跳跃,具体取决于您运行的浏览器。为了避免这种情况,您应该使用 UTC 而不是当地时间。即使您的输入值完全来自其他时区,使用 UTC 工作也将确保它不会被破坏。

moment.utc("Mon Oct 14 01:00:00 BST 2013","ddd MMM DD HH:mm:ss ? YYYY")
Run Code Online (Sandbox Code Playgroud)