Возраст равен разнице годов минус один, если день рождения в текущем году ещё не наступил. Задайте формат входа явно, чтобы не зависеть от неоднозначного Date.parse.
Реализация функции определения возраста через Function Declaration
Возраст равен разнице годов минус один, если день рождения в текущем году ещё не наступил. Задайте формат входа явно, чтобы не зависеть от неоднозначного Date.parse.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию calculateAge(), принимающую в качестве параметра дату рождения и возвращающую текущий возраст. Функцию необходимо объявить с помощью синтаксиса Function Declaration.
Ответ
Возраст равен разнице годов минус один, если день рождения в текущем году ещё не наступил. Задайте формат входа явно, чтобы не зависеть от неоднозначного Date.parse.
function calculateAge(birthDate, today = new Date()) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(birthDate)) throw new TypeError('Формат YYYY-MM-DD');
const [year, month, day] = birthDate.split('-').map(Number);
const birth = new Date(0);
birth.setFullYear(year, month - 1, day);
birth.setHours(0, 0, 0, 0);
if (birth.getFullYear() !== year || birth.getMonth() !== month - 1 || birth.getDate() !== day || birth > today) {
throw new RangeError('Некорректная дата рождения');
}
let age = today.getFullYear() - year;
if (today.getMonth() < month - 1 || (today.getMonth() === month - 1 && today.getDate() < day)) age--;
return age;
}
Используется местная календарная дата, а today можно подставить для проверки. Для 29 февраля в невисокосный год инкремент произойдёт 1 марта; другую договорённость нужно задавать отдельно. Деление миллисекунд на 365 дней неверно учитывает високосные годы.