以 YYYYMMDD 格式计算给定出生日期的年龄

2022-08-29 23:37:57

如何计算年龄(以年为单位),给定格式为YYYYMMDD的出生日期?可以使用该函数吗?Date()

我正在寻找比我现在使用的解决方案更好的解决方案:

var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
  age--;
}
alert(age);

答案 1

试试这个。

function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

我相信在你的代码上唯一看起来很粗糙的是部分。substr

小提琴http://jsfiddle.net/codeandcloud/n33RJ/


答案 2

我会去阅读:

function _calculateAge(birthday) { // birthday is a date
    var ageDifMs = Date.now() - birthday.getTime();
    var ageDate = new Date(ageDifMs); // miliseconds from epoch
    return Math.abs(ageDate.getUTCFullYear() - 1970);
}

免責聲明:这也存在精度问题,因此也不能完全信任。它可能会关闭几个小时,在某些年份或夏令时期间(取决于时区)。

相反,我建议使用库来做到这一点,如果精度非常重要的话。同样@Naveens帖子,可能是最准确的,因为它不依赖于一天中的时间。