年龄没有正确计算?

时间:2016-02-18 14:51:54

标签: javascript

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

我知道这是一种谜语,但我知道这个功能会产生错误的结果,但不知道什么时候会发生? DateString是std。 JavaScript中的日期对象。

Input On which it produced faulty results 
DateString1
1988-04-05 00:00:00
1965-05-06 00:00:00
1971-03-14 00:00:00
1975-11-10 00:00:00
1981-10-21 00:00:00
1974-06-01 00:00:00
1988-08-11 00:00:00

DateString2
2016-03-31 00:00:00

评估后的年龄必须永远不会> = 65,但对于这些值并非如此。

1 个答案:

答案 0 :(得分:1)

如果你想简单地将年龄显示为已完成的年份,这是一个很好的黑客:

function getAgeInFullYears(birthdate, today) {
    // These two lines are not necessary if function is called with proper Date objects
    birthdate = new Date(birthdate);
    today = new Date(today);

    birthdate = birthdate.getFullYear() * 10000 +
                birthdate.getMonth() * 100 +
                birthdate.getDate();

    today = today.getFullYear() * 10000 +
            today.getMonth() * 100 +
            today.getDate();

    return Math.floor((today - birthdate) / 10000);
}

它的工作原理是&#34;转换&#34;日期为yyyymmdd形式的十进制数字,如1974年4月27日的19,740,427。然后从当前日期减去出生日期,将结果除以10000并跳过余数。

使用的因子100和10000实际上非常随意,只要月因子> = 31且年度因子> =(12 *月因子),任何因素都有效。

例如,调用getAgeInFullYears('1988-04-05', '2016-02-18')会返回27。