这是我编写的两个 Angular2 自定义验证,第一个 validateAge 有效,但第二个 validateDob 无效...区别在于 validateAge 使用我所在的组件,并且是基于文本的字段,第二个需要使用日期输入字段并查找今天的日期和出生日期之间的差异,以找到实际年龄,然后根据年龄字段进行测量。但有些事情是不对的......任何想法
function validateAge(control: FormControl): { [s: string]: boolean } {
if (parseInt(control.value) <= 0) {
return {invalidAge: true};
}
}
function validateDob(control: FormControl): {[s:string]: boolean}{
var today = new Date();
var calcAge = today - control.value;
if (calcAge != parseInt([{age}]) ){
return {invalidDate: true}
}
}
最佳答案
这里的问题是您的 control.value 不是 Date 对象,而是字符串表示形式。
var today = new Date();
当前时间戳与输入值之间的毫秒差
var diff = today - new Date(control.value);
除以每年的毫秒数并发言
var calcAge = Math.floor(diff/ (1000*60*60*24*365)));
现在根据适当的值进行所需的任何比较。您没有向我们展示您的年龄对象,所以我实际上不知道您在寻找什么比较。
if (calcAge < someAgeThreshold) ){
return {invalidDate: true}
} else {
return null;
}
另请注意,使用自定义验证时,当您返回 null 时,验证器不会返回错误,并且任何具有值的内容都被视为有错误。
关于javascript - 为什么我在 Angular2 中的自定义验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976848/