Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中日期的错误行为_Javascript_Date - Fatal编程技术网

Javascript中日期的错误行为

Javascript中日期的错误行为,javascript,date,Javascript,Date,我在日期和时区方面遇到了麻烦,想知道为什么这两个不同的查询会给出不同的结果。 它会根据我要发送的年份改变时区,这是很少见的。 我在Ubuntu上使用Firefox26.0 查询: new Date("1990-04-12T00:00:00-03:00") new Date("1983-04-12T00:00:00-03:00") 结果: Date {Wed Apr 11 1990 23:00:00 GMT-0400 (WART)} Date {Tue Apr 12 1983 00:00:0

我在日期和时区方面遇到了麻烦,想知道为什么这两个不同的查询会给出不同的结果。 它会根据我要发送的年份改变时区,这是很少见的。 我在Ubuntu上使用Firefox26.0

查询:

new Date("1990-04-12T00:00:00-03:00")
new Date("1983-04-12T00:00:00-03:00")
结果:

Date {Wed Apr 11 1990 23:00:00 GMT-0400 (WART)}
Date {Tue Apr 12 1983 00:00:00 GMT-0300 (ART)}
查询:

new Date("1990-04-12T00:00:00-03:00")
new Date("1983-04-12T00:00:00-03:00")
结果:

Date {Wed Apr 11 1990 23:00:00 GMT-0400 (WART)}
Date {Tue Apr 12 1983 00:00:00 GMT-0300 (ART)}

有什么线索吗?

实现ECMAScript 5.1或更早版本(几乎无处不在)的JavaScript受到有缺陷规范的影响。基本上,即使您的计算机知道您提供的日期的正确时区调整是什么,JavaScript也会忽略这一点,并对您自己的本地时区使用任何当前规则。不管你是在1983年、1990年还是之前的任何一年通过,它都会使用现在生效的规则

对此进行了详细的讨论,我在博客上对此进行了讨论

对于即将发布的ECMAScript 6,这一点正在发生变化,但在大多数浏览器中还没有实现。即使这样,它仍然会使用运行代码的计算机的时区,它只会更准确地使用它

编辑

进一步挖掘,我猜你是在阿根廷西部,可能使用
美国/阿根廷/圣路易斯
区域或附近的区域。该区域交换机在1990年进行了一些更改,其中标准偏移量从UTC-2开始,然后切换到UTC-4的日光偏移量,然后返回到UTC-3的新标准偏移量。看起来,阿根廷西部决定多换一个小时,远离阿根廷其他地区

我感兴趣的是,您的浏览器发现了这些历史性的变化,因为似乎从2009年10月起,阿根廷西部就被定为UTC-3。您的浏览器似乎正确地识别了历史变化,这与我上面提到的相反

Ubuntu上的FireFox现在可能遵循ES6准则。我得检查一下。(这不是我最后一次检查。)


还有一些关于阿根廷西部时区历史的详细信息。

时区随时间而变化。也许你是说1983年你在另一个时区?根据“阿根廷每年决定是否遵守夏令时,个别省份可以选择不遵守联邦决定。目前,阿根廷不遵守夏令时。”而且“第一次官方标准化是在1894年9月25日进行的”日期时间很难确定。由于差异是一个小时,因此可能与夏令时设置有关。检查这在阿根廷何时实施