當使用下面的行時,我期待結果是'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,但我只是想知道是否有人知道爲什麼這發生,我怎麼能得到這個返回預期日期?
當使用下面的行時,我期待結果是'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,但我只是想知道是否有人知道爲什麼這發生,我怎麼能得到這個返回預期日期?
解析主要是依賴於實現的,所以它通常建議,以避免內置解析器。大多數瀏覽器使用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以獲取更多信息。
沒有提到ISO 8601格式,同時提供替代方案(「或單獨的日期構造函數[...]」)可能會讓來自搜索引擎的人相信,沒有其他方式。我相信ISO至少應該在已被接受的答案中提到它。另外,https://xkcd.com/1179/ –
@RobG我修改了答案。謝謝! –
那麼你的初始日期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
將被視爲一個month
和09
將被視爲day
。你需要修復它,所以它遵循Date
standards:日期字符串的
var theDate = new Date('09/22/2017 14:05:43');
console.log(theDate);
var str = theDate.toLocaleString();
console.log(str);
問題在於OP不應該使用非標準字符串的內置解析器。 – RobG
JavaScript日期格式爲MM/DD/YYYY格式,而不是DD/MM/YYYY格式。 –
'日期'格式應符合'Date.parse'支持的標準https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/parse – gurvinder372
當我嘗試你的代碼時,我只是'無效日期'。驚訝你沒有。 – putvande