18 岁以上的 Ionic 验证和 Angular 问题
Age 18+ Validation with Ionic & Angular issue
所以,我设法让它工作,但 2004 年 returns 未满 18 岁。
假设我将年份设置为 01/13/2004,它 returns 年龄为 18 岁,但 returns 他们未满 18 岁。这也适用于一月中满足要求的任何一天因为是 18 岁。这是检查年龄和日期的功能。我目前最好的猜测可能是时区问题?
GetAge(date: string): number {
let today = new Date();
let birthDate = new Date(date);
let age = today.getFullYear() - birthDate.getFullYear();
let month = today.getMonth() - birthDate.getMonth();
if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
console.log('Age: ' + age + '\nBirthday: ' + birthDate);
return age;
}
AgeCheck(controlName: string): ValidatorFn {
return (controls: AbstractControl) => {
const control = controls.get(controlName);
if (control?.errors && !control.errors['under18']) {
return null;
}
if (this.GetAge(control?.value) <= 18) {
return { under18: true }
} else {
return null;
}
}
}
我将其用作日期选择输入
<ion-input type="date" formControlName="dateofbirth"></ion-input>
这是 FormBuilder 的示例
this.credentials = this.fb.group({
dateofbirth: ['', [Validators.required]],
}, {validator: [this.AgeCheck('dateofbirth')]});
控制台输出截图
最好的方法是使用 Moment.js,例如:
npm install moment --save
和
import * as moment from 'moment';
...
age18Check(birthday: Date) {
return moment(birthday).add(18, 'years') <= moment();
}
通过这种方式,如果将小时插入生日(日期),您还可以检查小时。但是如果你对时间有问题,你也可以这样做:
age18Check(birthday: Date) {
return
moment(birthday).add(18, 'years').format('DD/MM/YYYY') <=
moment().format('DD/MM/YYYY');
}
我希望你正在寻找这个!
所以,我设法让它工作,但 2004 年 returns 未满 18 岁。 假设我将年份设置为 01/13/2004,它 returns 年龄为 18 岁,但 returns 他们未满 18 岁。这也适用于一月中满足要求的任何一天因为是 18 岁。这是检查年龄和日期的功能。我目前最好的猜测可能是时区问题?
GetAge(date: string): number {
let today = new Date();
let birthDate = new Date(date);
let age = today.getFullYear() - birthDate.getFullYear();
let month = today.getMonth() - birthDate.getMonth();
if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
console.log('Age: ' + age + '\nBirthday: ' + birthDate);
return age;
}
AgeCheck(controlName: string): ValidatorFn {
return (controls: AbstractControl) => {
const control = controls.get(controlName);
if (control?.errors && !control.errors['under18']) {
return null;
}
if (this.GetAge(control?.value) <= 18) {
return { under18: true }
} else {
return null;
}
}
}
我将其用作日期选择输入
<ion-input type="date" formControlName="dateofbirth"></ion-input>
这是 FormBuilder 的示例
this.credentials = this.fb.group({
dateofbirth: ['', [Validators.required]],
}, {validator: [this.AgeCheck('dateofbirth')]});
控制台输出截图
最好的方法是使用 Moment.js,例如:
npm install moment --save
和
import * as moment from 'moment';
...
age18Check(birthday: Date) {
return moment(birthday).add(18, 'years') <= moment();
}
通过这种方式,如果将小时插入生日(日期),您还可以检查小时。但是如果你对时间有问题,你也可以这样做:
age18Check(birthday: Date) {
return
moment(birthday).add(18, 'years').format('DD/MM/YYYY') <=
moment().format('DD/MM/YYYY');
}
我希望你正在寻找这个!