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'));
}
下面的代码与 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'));
}