Jquery验证某些浏览器上的日期代码失败

时间:2017-01-13 15:10:14

标签: javascript jquery date jquery-validate

以下代码与Jquery Validate一起使用,以检查表单上的出生日期。它运作良好多年,在2016/17年年底它失败了,但只有在IE和Chrome中,Firefox才算好。

经过一番调查后,我可以使用18作为年龄,而不是17岁。然后我意识到这是由于当前年份是2017年,而减去17年是2000年。我的观点是在IE和Chrome中使用它一个两位数的年份。日期01/01/00无效。传入的日期是DD / MM / YYYY。

我不确定如何强制使用四位数的年份,以确保无论如何都有效,并且明年不会超过18年。

> $.validator.addMethod("ValidDOB17", function (value, element) {
    // checking whether the date entered is in correct format
    var isValid = value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/);
    if (isValid) {
        var today = new Date();
        var minyear = new Date();
        today.setYear(today.getYear() - 17);
        minyear.setYear(today.getYear() - 82);
        var DOB = Date.parse(value);
        if (DOB >= today || DOB <= minyear ) {
            isValid = false;
        }
        return isValid;
    }
}, "You must be aged over 17");

1 个答案:

答案 0 :(得分:0)

使用getFullYear()setFullYear()。不推荐使用getYear()setYear()方法 - 它们可以在2000年之前返回2位数年份。

var value = '01/13/2000';
var isValid = /^\d\d?\/\d\d?\/\d\d\d\d$/.test(value);

if (isValid) {
  var today = new Date();
  var minyear = new Date();
  today.setFullYear(today.getFullYear() - 17);
  minyear.setFullYear(today.getFullYear() - 82);
  var DOB = Date.parse(value);
  if (DOB >= today || DOB <= minyear) {
    isValid = false;
  }
  console.log(value + (isValid ? ' is valid' : ' is invalid'));
}