我正在尝试编写一个日期验证器,它将以ddmmyyyy格式输入长度为8的字符串。它需要检查有效日期的所有基础知识,并返回true或false。
我无法使用额外的库,例如片刻,我不能使用正则表达式(这不是作业,我只是被告知要在这些约束下工作)。
如果有人能告诉我下面的内容有什么问题,我会很感激!
function isValidDate(i) {
if (i.length == 8) {
var dd = i.substring(0, 2);
var mm = i.substring(2, 4);
var yyyy = i.substring(4, 7);
var day = parseInt(dd,10);
var month = parseInt(mm,10);
var year = parseInt(yyyy,10);
if (year % 4 != 0 && day = 29 && month = 02) {
return false;
} else if (day > 31) {
return false;
} else if (month > 12) {
return false;
} else {
return true;
}
} else {
return false;
}
return true;
}
答案 0 :(得分:1)
你的第一个错误是在比较中使用=而不是==。
下一个是使用02作为整数,这是不可能的,因为parseInt将从02中取出2,所以只需比较== 2
if (year % 4 != 0 && day == 29 && month == 2) {
分配将始终在if语句中返回true,而年份%4在2014年不为0,因此您将始终以“return false”结束至2016年
答案 1 :(得分:1)
您可以使用此类功能。此函数检查提供的参数是否为有效整数(通过将它们解析为整数并检查它们是否为NaN),然后检查月和日是否有效,但不验证年份,因为年份可以是任何数字:)
function dateValidation(year, month, day){
// Check arguments
year = parseInt(year);
if (isNaN(year)) return false;
month = parseInt(month);
if (isNaN(month)) return false;
day = parseInt(day);
if (isNaN(day)) return false;
// Check if month is correct
if (!(month >= 1 && month <= 12)) return false;
switch (month){
case 1: //January
case 3: // March
case 5: // May
case 7: // July
case 8: // Augyst
case 10:// October
case 12:// December
return (day > 0 && day <= 31); // Maximum days is 31 in these months
break
case 4: // April
case 6: // June
case 9: // September
case 11:// November
return (day > 0 && day <= 30); // Maximum days is 30 in these months
break
case 2: // February
if (year % 4 != 0){
return (day > 0 && day <= 28);
} else {
return (day > 0 && day <= 29);
break
}
default:
return false;
}
}