双位数月份日期验证

时间:2012-09-13 14:03:22

标签: javascript jquery html validation

我有3个文本框,如下所示

<input type="text" name="birth_year" id="birth_year" maxLength="4" size="4">Year 
<input type="text" name="birth_month" id="birth_month" maxLength="2" size="2">Month
<input type="text" name="birth_day" id="birth_day" maxLength="2" size="2">Day

[2012] Year [09] Month [13] Day

如何使用JQ验证该日期?

我已经搜索了两天。

我找不到像XXXX-XX-XX这样格式的东西。

我找到了this jsFiddle,但是这个没有验证两个数字的月份或日期,如03或22

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

实际上非常简单:

var year = document.getElementsByName("birth_year")[0].value,
    month = document.getElementsByName("birth_month")[0].value,
    day = document.getElementsByName("birth_day")[0].value,
    date = new Date(year + "-" + month + "-" + day);

if (isNaN(date.getTime())) {
    // The date is invalid
}

不幸的是,这在IE8等旧浏览器中不起作用,因为它们不接受yyyy-mm-dd日期格式。但你可以像这样重写日期:

var date = new Date(month + "/" + day + "/" + year);

(我认为格式mm / dd / yyyy毫无意义,但是......这就是Javascript自第一次定义以来的工作方式。)

答案 1 :(得分:0)

更好的验证(参见working example)。如果你要求过生日,为什么不检查它们是否合理?第一部分检查无效日期(超出范围,包括该月特定范围之外的日期);第二部分是那些尚未出生的人,或者说太旧而不合理的人。

/**
 * input is year/month/day (month from 1 to 12, day from 1 to 31)
 * output is boolean: true if correct and in-range, false if not
 */
function isValidBirthdate(year, month, day, minAge, maxAge) {
  // javascript days expect zero-based days and months
  month --; day --;
  var saysWasBorn = new Date(year, month, day);
  if (saysWasBorn.getDate() != day
    || saysWasBorn.getMonth() != month
    || saysWasBorn.getFullYear() != year) {
        console.log("impossible date: ");     
        return false;
  }
  var now = new Date();
  var yearsOld = now.getFullYear() - saysWasBorn.getFullYear();
  if ((now.getMonth()*40 + now.getDate() - 1) < 
      (saysWasBorn.getMonth()*40 + saysWasBorn.getDate())) {
     yearsOld --;                
  }
  if (yearsOld > maxAge) {
    console.log("too old");        
    return false;
  } else if (yearsOld < minAge) {
    console.log("too young");
    return false;
  }
  return true;
}