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,但对于这些值并非如此。
答案 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。