Реализация функции определения возраста через Function Declaration

Возраст равен разнице годов минус один, если день рождения в текущем году ещё не наступил. Задайте формат входа явно, чтобы не зависеть от неоднозначного Date.parse.

Короткий ответ

Что ответить на собеседовании

Возраст равен разнице годов минус один, если день рождения в текущем году ещё не наступил. Задайте формат входа явно, чтобы не зависеть от неоднозначного 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 дней неверно учитывает високосные годы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее