Мне просто нужно было написать эту функцию для себя - принятый ответ довольно хорош, но IMO может использовать некоторую очистку. Это требует метки времени Unix для dob, потому что это было моим требованием, но его можно быстро адаптировать для использования строки:
var getAge = function(dob) {
var measureDays = function(dateObj) {
return 31*dateObj.getMonth()+dateObj.getDate();
},
d = new Date(dob*1000),
now = new Date();
return now.getFullYear() - d.getFullYear() - (measureDays(now) < measureDays(d));
}
Обратите внимание, что я использовал плоское значение 31 в моей функции measureDays. Все вычисления заботятся о том, чтобы «день года» был монотонно возрастающим показателем отметки времени.
Если вы используете метку времени или строку javascript, очевидно, вы захотите удалить коэффициент 1000.