我在 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] 删除。
我来说两句