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

标签 javascript momentjs

我在美国东部时间、时区 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);

最佳答案

... Windows 10 in EST, timezone UTC-05:00. I didn't define the daylight savings time in the laptop...

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

time zone settings screenshot

(UTC-05:00) 东部时间(美国和加拿大) 显示名称与 东部标准时间 的 Windows 时区 ID 匹配,该 ID 对应于 IANA America/New_York 的时区 ID。该时区目前在标准时间使用 UTC-5,在白天使用 UTC-4。显示名称字符串中显示“(UTC-05:00)”并不重要,它仍然遵循该时区适用的 DST。

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

确实没有充分的理由禁用它。如果您需要 UTC-5(不含夏令时)的时区,例如 (UTC-05:00) Bogota, Lima, Quito, Rio Branco,则只需选择该时区即可。

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

另一方面,如果您真正想要的是将给定日期和时间解释为 UTC-5,无论本地计算机设置如何,Moment 都可以帮助您实现这一点: p>

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 对象。

关于javascript - Moment.js 使用与系统中定义的时区不同的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464816/

相关文章:

javascript - 如何从 moment.unix() 将 moment 解析为特定时区

javascript - 将utc时间转换为特定格式的本地时间

asp.net 内联中的 Javascript null 变量

javascript - 设置 facebook 登录时遇到问题

javascript - React 中的构造方法

javascript - express 无法从 url 获取查询参数

javascript - 如何从 utc 获取本地日期和时间

javascript - 使用 moment.js 将 Utc 日期更改为本地日期

javascript - 如何使用 moment.js 解析给定的日期字符串?

javascript - 如何干燥类似的函数调用