Moment.js 使用与系统中定义的时区不同的时区

ps0604

我在 EST 时区 UTC-05:00 的装有 Windows 10 的笔记本电脑上运行 Moment。没有在笔记本电脑中定义夏令时,但是当我运行下面的代码时,Moment 会将日期转换为 UTC-04:00。为什么 Moment 使用的时区与笔记本电脑中定义的时区不同?

        var ts = "2019-04-01T18:22:57.813";
        var dateTime = moment(ts, 'YYYY-MM-DD HH:mm').toDate();
        console.log(dateTime);
马特·约翰逊-品脱

... EST 中的 Windows 10,时区 UTC-05:00。我没有在笔记本电脑中定义夏令时...

根据您的解释,我假设您的时区设置如下所示:

时区设置截图

(UTC-05:00) Eastern Time (US & Canada)显示名称的视窗时区ID相匹配Eastern Standard Time,其对应于的IANA时区ID America/New_York该时区目前在标准时间使用 UTC-5,在白天使用 UTC-4。它在显示名称字符串中显示“(UTC-05:00)”并不重要,它仍然遵循适用于该时区的 DST。

对于具有夏令时的时区,通常会启用“自动调整夏令时”功能。如此处所示,通常不建议将其关闭。问题在于某些软件不会评估该标志,而只会查看时区标识符。对于网络浏览器,您会发现 Edge 会遵守此标志,但 Chrome 不会。

真的没有充分的理由禁用它。如果您需要一个没有 DST 的 UTC-5 时区,例如(UTC-05:00) Bogota, Lima, Quito, Rio Branco,那么只需选择该时区。

最后,认识到这与 Moment.js 无关。您将看到与 JavaScriptDate对象相同的行为由于 DST 在美国东部时间 4 月 1 日生效,因此您将看到该日期的 UTC-4。

另一方面,如果您真正想要的是将给定的日期和时间解释为 UTC-5,而不管本地计算机设置如何,Moment 可以帮助您:

var m = moment.parseZone("2019-04-01T18:22:57.813-05:00");
m.format() //=> "2019-04-01T18:22:57-05:00"

但是,如果您这样做m.toDate(),那么您将返回一个Date对象,该对象将再次获取计算机的本地时区。对于这种情况,请尽量避免使用Date对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章