以下代码与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");
答案 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'));
}