【问题标题】:Date.prototype.setMonth() changes the timezone offset?Date.prototype.setMonth() 更改时区偏移量?
【发布时间】:2017-01-03 23:00:06
【问题描述】:

这仅发生在 setMonth() 方法中,其他 set*() 方法均不发生。

这是我的意思的一个例子:

var date = new Date();
date.getTimezoneOffset(); // -60

date.setMonth(5);
date.getTimezoneOffset(); // -120

这是预期的行为吗? There's nothing mentioned about this on MDN.

【问题讨论】:

  • 您可能正在跨越夏令时边界。
  • 使用原始 Javascript 日期代码是灾难的根源。 Moment.js 是行业标准,但也有其他不错的日期库。使用 Moment 或其他库而不是尝试使用基本的 JS 日期内容会更好,因为它有很多问题。
  • @machineghost——这是一个无法证实的非常黑暗的观点。 Moment.js 不能帮助 OP 解决这个问题。
  • JavaScript 不正确地处理 UTC 偏移量。这是在标准中。 ecma-international.org/ecma-262/5.1/#sec-15.9.1.8
  • @RobG 可能很黑,但这是许多有经验的 JS 开发人员共享的观点;只需在 Google 上搜索“为什么使用 moment”之类的内容,您就会看到大量页面显示“原生 JS 日期解析并不是世界上最糟糕的事情,但 Moment 好多了”。至于 Moment.js 没有帮助 OP:stackoverflow.com/questions/34838542/…

标签: javascript


【解决方案1】:

getTimezoneOffset method 在 DST 期间返回不同的值,而在月份 5 DST 与现在不同。

返回的时区偏移量适用于调用它的日期。在主机系统配置为夏令时的情况下,偏移量将根据 Date 所代表的日期和时间以及夏令时适用而发生变化。

var date = new Date();
console.log(date.getTimezoneOffset());

date.setMonth(0);
console.log(date.getTimezoneOffset());

date.setMonth(5);
console.log(date.getTimezoneOffset());

顺便说一句,如果您将在 6 月运行此代码 - 您会发现没有区别 :)

【讨论】:

  • 另外,如果主机没有设置为观察夏令时,现在也没有区别。 ;-)
猜你喜欢
  • 2014-12-28
  • 2014-12-10
  • 2011-09-23
  • 2013-07-19
  • 1970-01-01
  • 2011-09-02
  • 2023-03-03
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多