爲了方便,這裏使用的是 yyyy/MM/dd 格式的日期。
一般策略:
將年月日分別取出,根據是否閏年和每月的日期進行判斷。
function judgeDate(date){
const rmons = [31,29,31,30,31,30,31,31,30,31,30,31],
pmons = [31,28,31,30,31,30,31,31,30,31,30,31];
var year = parseInt(date.substr(0,4)),
mon = parseInt(date.substr(5,7)),
day = parseInt(date.substr(8,10));
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
return mon > 0 && mon <=12 && day > 0 && day <= rmons[mon-1];
}else{
return mon > 0 && mon <=12 && day > 0 && day <= pmons[mon-1];
}
}
使用JS內置對象Date進行判斷:
將輸入的字符串直接轉化爲Date對象,並根據是否轉化後的對象是否有效及重新拼接後是否和原來相同判斷有效性。
function judgeDate(date){
var pDate = new Date(date);
if(isNaN(pDate.getTime())){
return false;
}
var year = pDate.getFullYear(),
mon = /(\d+)/.test(pDate.getMonth()+1+"")&&RegExp.$1.length <= 1?"0"+RegExp.$1:RegExp.$1,
day = /(\d+)/.test(pDate.getDate()+"")&&RegExp.$1.length <= 1?"0"+RegExp.$1:RegExp.$1;
return date == year + "/" + mon + "/" + day;
}