Важно: Этот ответ не дает 100% точного ответа, он выключен примерно на 10-20 часов в зависимости от даты.
Лучших решений не существует (во всяком случае, не в этих ответах). - Навин
Я, конечно, не смог устоять перед желанием принять вызов и сделать более быстрый и короткий калькулятор дня рождения, чем текущее принятое решение.
Главное в моем решении - математика быстрая, поэтому вместо использования ветвления, а javascript модели даты предоставляет для вычисления решения, мы используем замечательную математику
Ответ выглядит следующим образом и работает на ~ 65% быстрее, чем у Навина, плюс он намного короче:
function calcAge(dateString) {
var birthday = +new Date(dateString);
return ~~((Date.now() - birthday) / (31557600000));
}
Магическое число: 31557600000 - это 24 *3600* 365.25 * 1000
Это длина года, длина года составляет 365 дней и 6 часов, что составляет 0,25 дня. В конце я получаю пол, который дает нам окончательный возраст.
Вот контрольные показатели: http://jsperf.com/birthday-calculation
Для поддержки формата данных OP вы можете заменить +new Date(dateString);
с +new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
Если вы можете найти лучшее решение, пожалуйста, поделитесь! : -)