使用新Date()设置的日期不正确

时间:2017-10-18 10:45:15

标签: javascript date

当使用以下行时,我预计结果为' 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 个答案:

答案 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将被视为month09将被视为day。您需要修复它,使其遵循 Date standards

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