这是我写的两个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}
}
}
答案 0 :(得分:1)
你在这里遇到的问题是你的control.value不是Date对象,而是字符串表示。
var today = new Date();
当前时间戳与输入值之间的毫秒差异
var diff = today - new Date(control.value);
每年除以ms并发言
var calcAge = Math.floor(diff/ (1000*60*60*24*365)));
现在根据适当的值进行所需的比较。你没有告诉我们你的年龄对象是什么,所以我实际上并不知道你正在寻找什么比较。
if (calcAge < someAgeThreshold) ){
return {invalidDate: true}
} else {
return null;
}
另请注意,使用自定义验证时,验证程序在返回null时不会返回任何错误,并且任何带有值的内容都被视为有错误。