2015-10-16 41 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