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

标签 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

最佳答案

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

关于javascript - 1925 年之前的 JavaScript 日期中的错误分钟和秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52151878/

相关文章:

javascript - 如何加载页面而不重新加载它?

javascript - 更改 Controller 属性值

css - Webkit 每晚构建中的错误修复通常需要多长时间才能触发 Chrome/Safari 更新?

php - 在 PHP 中格式化日期字符串

python - 根据 Python 中的日期范围检查日期

java - 在 Java 中缩小和混淆 JavaScript 代码

javascript - 在浏览器中自动执行操作

CSS 过滤器 : Invert does not work in mozilla

javascript - 从忽略时区的 Unix 时间戳创建日期

javascript - 关闭-换硬币