2017-01-13 2 views
0

Данный код используется с Jquery Validate, чтобы проверить дату рождения на форме. Он проработал много лет, на рубеже 2016/17 года он потерпел неудачу, но только в IE и Chrome Firefox был в порядке.Jquery Проверить код даты в некоторых браузерах

После некоторого расследования я смог заставить его работать с 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

Использование '.getFullYear()' вместо '.getYear()' –

ответ

0

getFullYear() и setFullYear(). Методы getYear() и setYear() устарели - они были сделаны, чтобы вернуть 2-значные лет за несколько лет до 2000 года

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

Смежные вопросы