向new Date()构造函数传入日期字符串为何返回Invalid Date,如何解决?
解决
new Date(DD/MM/YYYY格式字符串)返回Invalid Date的问题 报错的核心原因是:JavaScript的
Date构造函数默认不支持DD/MM/YYYY(日/月/年)的欧式日期格式解析,默认可识别的短日期格式为美式MM/DD/YYYY(月/日/年),你传入的18/11/2021会被识别为「第18个月的11日」,月份超出1-12的范围自然返回无效日期,确实需要先对原字符串做格式处理。
两种常用处理方案如下:
- 方案1:拆分后使用多参数构造函数(最推荐,无兼容性和时区坑)
Date构造函数支持按new Date(年, 月, 日)的格式传参,注意月份参数从0开始计数(0代表1月,11代表12月),示例代码:
var dateString = '18/11/2021'; // 拆分日期字符串并转为数字 const [day, month, year] = dateString.split('/').map(Number); // 月份减1适配0起始的计数规则 const dateObject = new Date(year, month - 1, day); alert(dateObject);
- 方案2:转换为ISO标准日期格式后传入
也可以把原字符串转换为YYYY-MM-DD的ISO标准格式后再传入构造函数,注意该方式部分浏览器会将字符串解析为UTC时间,可能存在时区偏差导致日期差1天的问题:
var dateString = '18/11/2021'; const [day, month, year] = dateString.split('/'); const dateObject = new Date(`${year}-${month}-${day}`); alert(dateObject);
内容的提问来源于stack exchange,提问作者sonicfroots
相关产品推荐
相关产品推荐

