javascript - Javascript 中日期的错误行为

标签 javascript date

我在日期和时区方面遇到问题,想知道为什么这两个不同的查询会给出不同的结果。 它很少会根据我要发送的年份更改时区。 我在 Ubuntu 上使用 Firefox 26.0

查询:

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

结果:

Date {Wed Apr 11 1990 23:00:00 GMT-0400 (WART)}

查询:

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

结果:

Date {Tue Apr 12 1983 00:00:00 GMT-0300 (ART)}

有什么线索吗?

最佳答案

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

详细讨论here ,我写了关于它的博客 here .

对于即将推出的 ECMAScript 6,这会发生变化,但您不会发现它已在大多数浏览器中实现。即便如此,它仍会使用运行代码的计算机的时区,只是会更准确地使用它。

编辑

进一步挖掘,我猜测您在阿根廷西部,可能使用 America/Argentina/San_Luis 区域或附近区域。该区域开关在 1990 年发生了一些变化,标准偏移从 UTC-2 开始,然后切换到 UTC-4 的日光偏移,然后又回到新的 UTC-3 标准偏移。阿根廷西部似乎决定将时间延长一个小时,远离阿根廷其他地区。 You can see these changes here .

对我来说有趣的是,您的浏览器发现了这些历史变化,因为自 2009 年 10 月以来,阿根廷西部似乎已固定为 UTC-3。看来您的浏览器正确识别了历史变化,这反对我上面提到的。

Ubuntu 上的 FireFox 现在可能正在遵循 ES6 指南。我得检查一下。 (我上次检查时没有。)

关于阿根廷西部时区历史的更多细节herehere .

关于javascript - Javascript 中日期的错误行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537770/

相关文章:

javascript - Promises数组,传递创建时使用的变量

javascript - 来自路由的 Controller 属性上的观察者未触发

javascript - 如何使用 JavaScript 格式化日期?

date - 在 Julia 中是否有一种有效的方法可以将程序的执行暂停到第二天?

date - ISO 8601 的月日部分是 --MM-DD 格式吗?

javascript - 如何使用 blogger api nodejs 插入帖子

javascript - 页面在加载时闪烁 - 隐藏/显示 javascript - Total Newbie

mysql - SYSDATE 与以 MM-DD 格式存储的日期之间的日期差异

javascript - 如何检测浏览器定义的日期格式?

javascript - 移相器 : Change anchor from Body?