Нужно учитывать високосные годы, если вы хотите, скажем, восемнадцатилетнего, чтобы дождаться разницы в 2 или 3 дня до его фактического дня рождения.
Вы можете оценить год как 365.25 * 24 * 60 * 60 * 1000, и часто это будет правильным.
function agefromYMD(y, m, d){
var years, months, days, dA, nA,
dob= new Date(y, m-1, d),
now= new Date();
now.setHours(0, 0, 0, 0);
return Math.floor((now-dob)/(365.25*24*60*60*1000));
}
или вы можете посмотреть даты, месяцы и полные годы.
function agefromYMD(y, m, d){
var years, months, days, dA, nA,
dob= new Date(y, m-1, d),
now= new Date();
now.setHours(0, 0, 0, 0);
dA= [dob.getUTCFullYear(), dob.getUTCMonth(), dob.getUTCDate()];
nA= [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];
years= nA[0]-dA[0];
months= nA[1]-dA[1];
days= nA[2]-dA[2];
if(months<=0 && days<0)--months;
if(months<0)--years;
return years;
}
agefromYMD (1984,2,26)