2017-10-18 152 views
0

當使用下面的行時,我期待結果是'22/09/2017 14:05:43',但它實際上返回'09/10/2018 14:05:43'。錯誤日期設置爲新日期()

var theDate = new Date('22/09/2017 14:05:43').toLocaleString(); 

我知道有JS庫那裏如可用於大量的日期時間操作的moment.js,但我只是想知道是否有人知道爲什麼這發生,我怎麼能得到這個返回預期日期?

+2

JavaScript日期格式爲MM/DD/YYYY格式,而不是DD/MM/YYYY格式。 –

+1

'日期'格式應符合'Date.parse'支持的標準https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/parse – gurvinder372

+2

當我嘗試你的代碼時,我只是'無效日期'。驚訝你沒有。 – putvande

回答

3

解析主要是依賴於實現的,所以它通常建議,以避免內置解析器。大多數瀏覽器使用xx/xx/xxxx作爲MM/DD/YYYY模式處理JavaScript日期,因此22/09/2017被視爲無效日期(例如Safari,Firefox,Chrome)或2017年第22個月的第9天(顯然是您的瀏覽器)。

您的瀏覽器將其解釋爲「第22個月的第9天」,所以你結束了在2018年10月9日,22個月,9天到2017年

要解決這個問題,你可以單獨串入的部分,並給他們的構造,避免了內置的解析器(記住,從本月數減1):

new Date(2017, 8, 22, ...) 

參考MDN's Date documentation以獲取更多信息。

+1

沒有提到ISO 8601格式,同時提供替代方案(「或單獨的日期構造函數[...]」)可能會讓來自搜索引擎的人相信,沒有其他方式。我相信ISO至少應該在已被接受的答案中提到它。另外,https://xkcd.com/1179/ –

+0

@RobG我修改了答案。謝謝! –

0

那麼你的初始日期string你傳遞給Date的構造函數是錯誤的,它應該是格式爲'MM/DD/YYYY HH:mm:ss'

你實際的代碼會給Invalid Date

var theDate = new Date('22/09/2017 14:05:43'); 
 
console.log(theDate); 
 
var str = theDate.toLocaleString(); 
 
console.log(str);

這裏22將被視爲一個month09將被視爲day。你需要修復它,所以它遵循Date standards:日期字符串的

var theDate = new Date('09/22/2017 14:05:43'); 
 
console.log(theDate); 
 
var str = theDate.toLocaleString(); 
 
console.log(str);

+0

問題在於OP不應該使用非標準字符串的內置解析器。 – RobG