當給Date函數(shù)的時間不存在時,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()
函數(shù)功能:遞歸解析日期是否為有效日期,若日期無效則月+1或年月+1,直到日期有效
tempCheck(date, callback) {
if (!date) return
// 校驗日期格式 根據(jù)自己的需求來
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
}
},