2015-10-16 46 views
0

我做一些javascript日期的东西,我执行以下操作:的Javascript划时代日期不正确

console.log(new Date(0)); 

我期望看到的* nix的时代,但我奇怪的返回:

Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time) 

发生了什么?

回答

0

我无法找到解释它的任何资源,但这种“错误”是因为我的时区(据我可以告诉)

我的时区为GMT-0500,它的背后是UTC时间5小时。向Wed Dec 31 1969 19:00:00添加5小时并获得Epoch(Thurs Jan 1 1970 00:00:00

+3

嗯,它告诉你在输出中你正在看一个特定的时区。看看'(新日期(0))。toISOString()' –

+0

不会有任何资源解释它,因为它只是普通的旧时区:) –

2

您正在设置内部时间值,即UTC,但看到一个基于系统设置的字符串,该字符串可能具有UTC-05的偏移量:00。

ECMAScript规范说明了Date构造函数和实例是如何工作的。鉴于:

new Date(0) 

日期构造函数被调用用一个参数(§20.3.2.2 Date(value)),所以它创建了一个Date实例与它的根据参数的类型内部时间值集。由于该值是一个数字,因此时间值被设置为该数字。

时间值是从1970-01-01T00:00:00Z §20.3.1.1 Time Values and Time Range以毫秒为单位的偏移量。请注意,它基于UTC。

的console.log的行为完全依赖于实现的,所以你会得到什么:

console.log(dateInstance); 

取决于主机。但是,大多数人似乎都会调用对象的方法toString方法,该方法根据主机系统的时区设置(§20.3.4.41 Date.prototype.toString())返回实施相关字符串。那就是“本地”时间。

时区偏移量可以使用getTimezoneOffset确定。这是在几分钟内,与ISO 8601偏移量相反(例如,UTC-05:00将为+300)。如果要获取表示内部时间值且没有偏移量的日期字符串,请使用toUTCString