Angular 2+从HTML5日期输入中获取年龄

时间:2018-03-27 08:24:14

标签: angular typescript date

我正在尝试使用使用角度的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);
}

3 个答案:

答案 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);
  }