我正在尝试使用使用角度的HTML5日期输入的现有表单来计算年龄。优选地,用户不必点击任何东西来生成它。
我目前能够获取日期,但格式似乎打破了我的代码。有没有办法让这项工作(改变格式)或更有效的新方式?
任何帮助都将不胜感激。
HTML:
<input type="date" name="dob" [(ngModel)]="birthdate">
<button (click)="getAge()">Get Age</button>
<input type="text" name="age" [(ngModel)]="data.age">
TS:
data: any;
birthdate: any;
constructor() {
this.data = {};
this.data.age = '';
this.birthdate = this.birthdate;
}
public getAge() {
console.log(this.birthdate);
const timeDiff = Math.abs(Date.now() - this.birthdate);
console.log(timeDiff);
this.data.age = Math.floor((timeDiff / (1000 * 3600 * 24)) / 365);
console.log(this.data.age);
}
答案 0 :(得分:0)
//dob is the date
function getAge(dob)
{
alert( new Date().getFullYear() - new Date(dob).getFullYear());
}
getAge('11/07/1993');//function call
答案 1 :(得分:0)
请注意这是完整的年龄,这意味着你会得到像26.5131这样的东西,所以将它转换成你想要的......
calculateAge(birthDate:Date): number {
const now = new Date();
const age = (now - birthDate) / (31556952000); // 31556952000 = 1 year in milliseconds
return age;
}
答案 2 :(得分:0)
我发现使用HTML5类型=&#34;日期&#34;输入意味着我需要找到一种正确格式化的方法,所以我使用了以下内容 - https://github.com/JohannesHoppe/angular-date-value-accessor
这意味着我上面的原始代码有效。经过一些研究,虽然确保年龄准确,但我发现最佳做法是添加&#39; .25&#39;到Math.floor((timeDiff /(1000 * 3600 * 24))/ 365);
希望这有助于其他任何希望通过Angular 2 +
实现这一目标的人HTML:
<input type="date" name="dob" [(ngModel)]="birthdate" useValueAsDate>
<button (click)="getAge()">Get Age</button>
<input type="text" name="age" [(ngModel)]="data.age">
TS:
data: any;
birthdate: any;
constructor() {
this.data = {};
this.data.age = '';
}
public getAge() {
const timeDiff = Math.abs(Date.now() - this.birthdate);
this.data.age = Math.floor((timeDiff / (1000 * 3600 * 24)) / 365.25);
}