2017-08-04 54 views
0

如果我在毫秒以下日期:JSON.stringify連載日期不正確

星期二1984年4月3日00:00:00 GMT + 0100(BST)

當我運行:

console.log(JSON.stringify(new Date(449794800000))) 

它的輸出是:

「1984-04-02T23:00:00.000Z」

但是輸出應該是:

「1984-03-03T23:00:00.000Z」

+2

因爲Unix時間戳449794800是1984-04-02T23:00:00.000Z '。你爲什麼認爲這是一個月前? – randomir

+0

'JSON.stringify()'實際上調用日期對象的'.toJSON'方法,該方法返回字符串'「1984-04-02T23:00:00.000Z」'。它不影響日期對象的'.toJSON'方法的工作方式。 – undefined

回答

0

這就是所謂的ISO日期格式,是發送日期的標準方法。它是明確的和容易解析的,但不是爲了最大程度的人類可讀性而設計的。 JSON.stringify()已被寫入特殊處理日期,因爲日期不是JSON值。如果你想讓它更具人類可讀性,你可以改爲JSON.stringify(date.toString())。日期更改的原因是它將您的時區(格林尼治標準時間+ 1)轉換爲格林尼治標準時間,因此它會返回一個小時,並在前一天結束。

如果你想創建一個日期對象存儲在一個GMT一天開始,你可以做到以下幾點:

const dateHere = new Date(2017, 7, 4) 
//60000 ms per minute 
const utcMillis = dateHere.getTime() - dateHere.getTimezoneOffset() * 60000 
const utcDate = new Date(utcMillis) 
console.log(utcDate.toISOString()) //"2017-08-04T00:00:00.000Z" 
0

因爲日期時間449794800000在JavaScript是「1984-04-02T23:00: 00.000Z」

自己嘗試一下,運行

console.log(new Date(449794800000)). 

事實上,1000比較它與UNIX時間,(使用this除以你的電話號碼從毫秒到秒改造日期),日期是正確的。它應該是「1984-04-02T23:00:00.000Z」而不是「1984-03-03T23:00:00.000Z」