Создание функции для расчёта возраста через Function Expression

Вычисляйте возраст по календарным годам и дате дня рождения, а не по числу миллисекунд. Будущая дата рождения не даёт обычного возраста: ниже для неё явно возвращается null.

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

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

Вычисляйте возраст по календарным годам и дате дня рождения, а не по числу миллисекунд. Будущая дата рождения не даёт обычного возраста: ниже для неё явно возвращается null.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию getAge(), принимающую в качестве аргумента дату рождения и возвращающую вычисленный возраст. Функция должна быть объявлена при помощи Function Expression. Пример использования:

const calculateAge = function(birthDate) {
    // реализация
};

const age = calculateAge(new Date('1990-05-15'));
console.log(age); // выводит текущий возраст

Функция должна корректно работать с датами как в прошлом, так и в будущем, учитывая високосные годы.

Ответ

Вычисляйте возраст по календарным годам и дате дня рождения, а не по числу миллисекунд. Будущая дата рождения не даёт обычного возраста: ниже для неё явно возвращается null.

const calculateAge = function (birthDate, today = new Date()) {
  if (!(birthDate instanceof Date) || Number.isNaN(birthDate.getTime()) || Number.isNaN(today.getTime())) {
    throw new TypeError('Некорректная дата');
  }
  const birth = [birthDate.getUTCFullYear(), birthDate.getUTCMonth(), birthDate.getUTCDate()];
  const current = [today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate()];
  const beforeBirthday = current[1] < birth[1] || (current[1] === birth[1] && current[2] < birth[2]);
  const age = current[0] - birth[0] - Number(beforeBirthday);
  return age < 0 ? null : age;
};

Выбран календарь UTC, чтобы дата из '1990-05-15' не сдвигалась на предыдущий день в отрицательной зоне. Для 29 февраля в невисокосный год возраст увеличивается 1 марта. Если нужны отрицательные значения или иной договорный день, это следует определить отдельно.

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

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

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

Подробнее