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

Jquery Validate date code failing on some browsers

下面的代码与 Jquery 验证一起使用以检查表格上的出生日期。它多年来一直运行良好,在 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");

使用 getFullYear()setFullYear()getYear()setYear() 方法已弃用 - 在 2000 年之前,它们被设为 return 两位数年份。

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'));
}