当使用以下行时,我预计结果为' 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可以用于很多日期时间操作,但我只是想知道是否有人知道为什么会发生这种情况以及如何让它返回预期日期?
答案 0 :(得分:3)
解析日期字符串主要取决于实现,因此通常建议避免使用内置解析器。大多数浏览器将模式xx/xx/xxxx
的JavaScript日期视为MM/DD/YYYY
,因此22/09/2017
被视为无效日期(例如Safari,Firefox,Chrome)或第22个月的第9天2017年(显然是您的浏览器)。
您的浏览器将其解释为“第22个月的第9天”,因此您最终将于2018年10月9日,22个月和9天结束。
要解决此问题,您可以将字符串分成几部分并将它们分配给构造函数,避免使用内置解析器(记住从月份数中减去1):
new Date(2017, 8, 22, ...)
有关详细信息,请参阅MDN's Date documentation。
答案 1 :(得分: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
将被视为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);