当使用下面的行时,我期望结果为“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
模式的 JavaScript 日期视为 MM/DD/YYYY
,因此 22/09/2017
被视为无效日期(例如 Safari、Firefox、Chrome)或 2017 年 22 月 9 日(显然是您的浏览器)。
您的浏览器将其解释为“22 月 9 日”,因此您的最终日期是 2018 年 10 月 9 日,2017 年已经过去 22 个月零 9 天了。
要解决此问题,您可以将字符串分成几部分并将它们交给构造函数,从而避免使用内置解析器(记住从月份数字中减去 1):
new Date(2017, 8, 22, ...)
引用MDN's Date documentation了解更多信息。
关于javascript - 使用 new Date() 设置的日期不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808363/