创建日期验证器

时间:2014-01-06 10:38:32

标签: javascript date

我正在尝试编写一个日期验证器,它将以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;
}

2 个答案:

答案 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;
   }
}