gpt4 book ai didi

javascript - chrome 中 js 日期对象中奇怪的秒偏移

转载 作者:可可西里 更新时间:2023-11-01 01:18:07 24 4
gpt4 key购买 nike

在年初查看日期对象的 valueOf 值时,我希望始终收到零秒。以下代码显示,直到 1917 年,chrome 中的偏移量为 54 秒或 40 秒。在 IE 中,我收到所有年份的 0 秒。

这是有原因的吗?它似乎只发生在最新的 chrome 版本中

   for(var i=0; i<2020;i++)
if(!new Date(i,0,1).valueOf().toString().match("00000$"))
console.log({
y:i,
s: new Date(i,0,1).valueOf().toString().match(/(\d{2})\d{3}$/)[1]})

最佳答案

This is Not a BUG..

正如@Krzysztof 指出的那样,Chrome 有 implemented a new spec for timezone offset calculation在合并 Make LocalTZA take 't' and 'isUTC' and drop DSTA(t) 之后到 Ecma 262。因此,现在时区转换不能仅通过向后的秒数间隔来工作,它被计算为在特定区域中观察到的本地时间

Explanation:

我来自南亚的一个叫做孟加拉国的奇妙小国,它遵循BST(孟加拉国标准时间+0600 GMT),这并不总是比格林威治标准时间早 6 小时。当我在格林威治标准时间打印今年的开始时间时,JavaScript date 采用本地时间,我得到:

new Date(2018, 0, 1).toUTCString()
// "Sun, 31 Dec 2017 18:00:00 GMT"

2009年one hour day-light saving 6 月 19 日至 12 月 31 日在孟加拉国观察到。因此,如果我打印 2009 年 12 月的第一天,我会得到:

new Date(2009, 11, 1).toUTCString()
// "Mon, 30 Nov 2009 17:00:00 GMT"

您可以看到夏令时现在反射(reflect)在日期中,这在我的 nodeJS 控制台中是不可见的。 1941-1942 年的本地时间也有变化,如下所示,可以在 timeanddate.com 上看到。 :

enter image description here

所有更改现在都反射(reflect)在 Chrome 中:

new Date(1941, 6, 1).toUTCString()
// "Mon, 30 Jun 1941 18:06:40 GMT"

new Date(1941, 11, 1).toUTCString()
// "Sun, 30 Nov 1941 17:30:00 GMT"

new Date(1942, 7, 1).toUTCString()
// "Fri, 31 Jul 1942 18:30:00 GMT"

new Date(1942, 11, 1).toUTCString()
// "Mon, 30 Nov 1942 17:30:00 GMT"

现在,如果我选择 1941 年之前的任何日期,请记住我的本地时间提前 6 小时,我会看到偏移 6 分 40 秒。由于最近 Chrome 的更新,或者具体说 ECMAScript(JavaScript) 的更新,它会根据时区而有所不同。

关于javascript - chrome 中 js 日期对象中奇怪的秒偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50857187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com