什么可以使Date.parse返回不同​​的值?

时间:2015-06-10 18:34:14

标签: javascript date

我在Date.parse函数具有相同参数的两台计算机上略有不同。

我在IE(10和8)和FF(最新)的地址栏上运行javascript:Date.parse('11/10/2014 00:00:00 AM')(月/日/年时间),结果是:

机器1: 1415588400000

机器2: 1415584800000

没有小时/分钟/秒,结果是相同的。

这两台机器都是Windows 7 Professional,但机器2最近已从Windows Vista更新到Windows 7.在更新之前,此命令有效。此外,Machine 2只安装了一个更新,而Machine 1安装了200个更新。

两台机器的时间和日期(格式,时区等)配置相同

在具有相同时区的两台计算机上Date.parse导致差异的原因是什么?

编辑:我来自阿根廷,两台机器都有时区:(UTC-03:00)布宜诺斯艾利斯

2 个答案:

答案 0 :(得分:2)

  

什么可能导致Date.parse

的差异

时区,用户本地化环境。

如果您想使用日期(信任),请使用:

  • Moment.JS
  • ISO格式yyyy-mm-ddThh:mm:ss[+xy:zp]
  • 通过/手动拆分并创建一个新的日期,每个参数都放在其位置。

关于你的问题:

Date.parse('2014-11-10T00:00:00Z')

可以在所有浏览器中使用相同的值。注意它的UTC。

但是,(如果需要) - 只需添加时区,例如:

Date.parse('2014-11-10T00:00:00+03:00')

如果你想要一个日期对象:

new Date(Date.parse('2014-11-10T00:00:00+03:00'))

答案 1 :(得分:1)

这是一个复合问题。

  • 阿根廷过去曾在2009年拥有夏令时。从2010年开始,他们不再拥有夏令时。 Reference Here

  • JavaScript有一个已知问题,即没有使用正确的DST规则,只是它知道的最新规则。 Details Here

  • 返回1415584800000的计算机使用的是UTC-2而不是UTC-3,因为它没有获得添加2010年新规则的更新。它仍然使用2009年的规则,将此日期设置为夏令时。

    此更新已包含在KB976098 - 2009年12月的Windows累积时区更新中。

您可以通过查看以下位置的注册表来验证这一点:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Argentina Standard Time\Dynamic DST

应用更新后,它应如下所示:

Registry Screenshot

如果没有更新,它将没有2010年的条目。

您应始终应用时区更新 - 可以从Windows Update自动应用,也可以在microsoft.com/time上观看修改列表。