为什么新的Date(1970,0,1).getFullYear()返回1969?

wil*_*age 6 javascript

有人可以解释为什么new Date(1970, 0 ,1).getFullYear()回报1969而不是1970

result.textContent = new Date(1970, 0, 1).getFullYear();
Run Code Online (Sandbox Code Playgroud)
<div id=result></div>
Run Code Online (Sandbox Code Playgroud)


提起的Firefox Bug:https://bugzilla.mozilla.org/show_bug.cgi? id = 1093130

T.J*_*der 7

看起来很像Firefox的SpiderMonkey引擎中的时区错误(很可能在它使用的某个库中); 在我的实验中它只影响*nix操作系统,而不影响Windows.(见下面为什么时区会进入它.)它正在回归

Wed Dec 31 1969 23:00:00 GMT+0000 (BST)

......当然,当我们(在英国时间@wilsonpage,我和其他数百万)是不是在英国夏令时间了(当我们在夏天的时候,它是GMT + 0100,而不是GMT-0100,因此它在任何情况下,当地时间落后于 UTC 都没有意义).(附注:Chrome也显示"BST",但它有正确的日期/时间.)(美国人的注意事项:你习惯于"xST"意思是"x 标准时间"[而不是"x 日光时间"] ,但这里BST代表"英国夏令时" - 例如,夏令时.当我们不在夏季时,我们在GMT.)

我在Linux Mint 16上的Firefox 30(显然是包系统中的最新版本)和同一系统上的Firefox 33(直接从Mozilla下载和安装)中看到了这种行为; 我没有看到它在Firefox 33在Windows 8.1.

@wilsonpage已经确认他正在使用OS X并且他在同一时间看到我(包括"BST"部分).

result.textContent = new Date(1970, 0, 1).toString();
Run Code Online (Sandbox Code Playgroud)
<div id=result></div>
Run Code Online (Sandbox Code Playgroud)


时区进入它(并且显然触发了错误)的原因是,您为该版本的Date构造函数赋予的值被解释为UTC,但getFullYear在本地时间返回其值.