当给Date函数的时间不存在时,Date会溢出,如图:
25年的9月没有31号。将不存在的正确格式日期输入给Date时,Date溢出为10月1号

5f154792b2b802953ca43aad79f9141b.png
此时要判断日期是否有效可以将格式化前和格式化后的两个日期进行对比
let tempY = +date.slice(0, 4)
let tempM = +date.slice(5, 7)
let tempD = +date.slice(8, 10)
let checkDate = new Date(date)
let isTrue = checkDate.getMonth() + 1 !== tempM || tempY !== checkDate.getFullYear() || tempD !== checkDate.getDate()
函数功能:递归解析日期是否为有效日期,若日期无效则月+1或年月+1,直到日期有效
tempCheck(date, callback) {
if (!date) return
// 校验日期格式 根据自己的需求来
date = date.replace(/-(\d)(?!\d)/g, "-0$1")
let pattern = /^\d{4}-\d{2}-\d{2}$/
if(pattern.test(dateString)) return
// 判断日期是否有效
let tempY = +date.slice(0, 4)
let tempM = +date.slice(5, 7)
let tempD = +date.slice(8, 10)
let checkDate = new Date(date)
if (checkDate.getMonth() + 1 !== tempM || tempY !== checkDate.getFullYear() || tempD !== checkDate.getDate()) {
if (tempM + 1 > 12) {
tempM = 1
tempY++
} else {
tempM++
}
date = `${tempY}-${tempM}-${tempD}`
this.tempCheck(date, callback)
} else {
callback(date)
return
}
},