1925年之前的JavaScript日期中错误的分钟和秒

时间:2018-09-03 14:39:24

标签: javascript google-chrome date

我有一个允许用户选择一些时隙的应用程序。默认情况下,这些时隙为空,并且我的.NET后端具有默认生成的类型为DateTimeOffset的值,默认情况下将其设置为"0001-01-01T00:00:00+00:00"

现在,当我使用此值填充前端日期时,它将在本地时区中生成日期,但是分钟和秒数错误。这仅在Chrome中发生。我在Edge或Firefox下看不到这个。

console.log(new Date("2001-01-01T00:00:00+00:00").toString())
// Mon Jan 01 2001 02:00:00 GMT+0200 (Eastern European Standard Time)
console.log(new Date("1001-01-01T00:00:00+00:00").toString())
//Thu Jan 01 1001 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1801-01-01T00:00:00+00:00").toString())
//Thu Jan 01 1801 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1901-01-01T00:00:00+00:00").toString())
//Tue Jan 01 1901 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1961-01-01T00:00:00+00:00").toString())
//Sun Jan 01 1961 03:00:00 GMT+0300 (Eastern European Standard Time)
console.log(new Date("1921-01-01T00:00:00+00:00").toString())
//Sat Jan 01 1921 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1931-01-01T00:00:00+00:00").toString())
//Thu Jan 01 1931 03:00:00 GMT+0300 (Eastern European Standard Time)
console.log(new Date("1922-01-01T00:00:00+00:00").toString())
//Sun Jan 01 1922 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1923-01-01T00:00:00+00:00").toString())
//Mon Jan 01 1923 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1924-01-01T00:00:00+00:00").toString())
//Tue Jan 01 1924 02:02:04 GMT+0202 (Eastern European Standard Time)
console.log(new Date("1925-01-01T00:00:00+00:00").toString())
//Thu Jan 01 1925 02:00:00 GMT+0200 (Eastern European Standard Time)

如您所见,我在日期上四处打转,以查看发生在哪个日期之前,但是问题可能不是1925年,而是当前日期之前的某个时间。有人知道为什么会这样吗?

按要求截屏 enter image description here

1 个答案:

答案 0 :(得分:7)

1883年之前的时区未标准化。如果每年检查一次,您会发现1883年的附加分钟数“被破坏”,而1884年的“精细”。 Chrome可以很好地处理这种过渡-您会注意到Firefox中不存在“问题”。

new Date("1883-01-01T00:00:00+00:00")
Sun Dec 31 1882 16:07:02 GMT-0752 (Pacific Standard Time)
new Date("1884-01-01T00:00:00+00:00")
Mon Dec 31 1883 16:00:00 GMT-0800 (Pacific Standard Time)

实际上,您可以追溯到1883年11月18日。

new Date("1883-11-18T00:00:00+00:00")
Sat Nov 17 1883 16:07:02 GMT-0752 (Pacific Standard Time)
new Date("1883-11-19T00:00:00+00:00")
Sun Nov 18 1883 16:00:00 GMT-0800 (Pacific Standard Time)

Chrome会非常努力地进行时间匹配,甚至计算2010年埃及斋月暂停的夏令时。

在此处了解更多信息:https://www.huffingtonpost.com/quora/how-when-and-why-were-tim_b_5838042.html