Назад в Блог
3 min read

Как рассчитать возраст в JavaScript (от даты рождения до лет, месяцев, дней)

Узнайте практические способы расчета возраста по дате рождения в JavaScript. Включает точные годы, месяцы, дни, опцию по состоянию на дату и распространенные ошибки, такие как часовые пояса и високосные годы.

Как рассчитать возраст в JavaScript (от даты рождения до лет, месяцев, дней)

Если вам нужно вычислить возраст человека по дате рождения (DOB) в JavaScript, вы можете сделать это несколькими разными способами. Ключевым моментом является определение того, что вы подразумеваете под возрастом:

  • Возраст в полных годах (наиболее распространенный)
  • Точный возраст (годы, месяцы, дни)
  • Возраст на определенную дату (не всегда сегодня)

1) Посчитать возраст в полных годах (просто и правильно)

Это стандартный подход: вычтите годы и откорректируйте их, если день рождения в этом году еще не наступил.

function ageInYears(dob, asOf = new Date()) {
  константное рождение = новая дата (доб);
  const ref = новая дата (по состоянию на);

  пусть годы = ref.getFullYear() -birth.getFullYear();
  const m = ref.getMonth() - рождение.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() 

Пример: дата рождения: 10 февраля 2000 г., по состоянию на 09 февраля 2026 г. получается 25 (день рождения завтра).

2) Рассчитайте точный возраст (годы, месяцы, дни)

Если вам нужна точная разбивка, вы можете рассчитать сначала годы, затем месяцы, а затем дни, «заимствовав» данные предыдущего месяца, когда это необходимо.

function strictAge(dob, asOf = new Date()) {
  константное рождение = новая дата (доб);
  const ref = новая дата (по состоянию на);

  пусть годы = ref.getFullYear() -birth.getFullYear();
  пусть месяцы = ref.getMonth() -birth.getMonth();
  пусть дни = ref.getDate() -birth.getDate();

  // Корректируем дни, заимствуя данные из предыдущего месяца
  если (дней <0) {
    const prevMonth = новая дата (ref.getFullYear(), ref.getMonth(), 0); // день 0 = последний день предыдущего месяца
    дни += prevMonth.getDate();
    месяцы--;
  }

  // Корректируем месяцы, заимствуя данные из предыдущего года
  если (месяцев <0) {
    месяцы += 12;
    годы--;
  }

  return {годы, месяцы, дни};
}

Примечание: Краевые случаи с датой месяца (например, дата рождения 31-го числа) требуют тщательного тестирования. Если вам нужно что-то надежное для всех локалей и крайних случаев, рассмотрите возможность использования хорошо протестированной библиотеки дат.

3) Используйте дату «по состоянию» для возраста на прошлую или будущую дату

Многим приложениям требуется возраст на конкретную дату (страховка, правила отбора, окончание учебного года). Обе приведенные выше функции принимают параметр asOf, поэтому вы можете сделать:

ageInYears('1995-06-20', '2030-01-01');
точныйВозраст('20 июня 1995 г., '01 января 2030 г.');

Распространенные ошибки (и как их избежать)

  • Часовые пояса: анализ ГГГГ-ММ-ДД может вести себя по-разному в зависимости от среды. Если вас интересует только дата, создайте дату по местному времени: new Date(year,monthIndex, day).
  • Дни рождения високосных дней: определите свое правило на 29 февраля в невисокосные годы (28 февраля или 1 марта). Будьте последовательны.
  • Недопустимые входные данные: подтверждают, что дата рождения - реальная дата, а не дата в будущем.

Быстрый вариант: воспользуйтесь онлайн-калькулятором возраста

Если выпросто нужен ответ (или вы хотите проверить свою реализацию), воспользуйтесь нашим бесплатным калькулятором: Рассчитать возраст онлайн.

Связанные руководства

Часто задаваемые вопросы

Какой наиболее точный способ определения возраста?

В большинстве случаев стандартом является «полные годы» (возраст в целых годах). Если вам нужна полная разбивка, сначала рассчитайте годы, затем месяцы, затем дни и проверьте крайние случаи, такие как продолжительность месяца и високосные годы.

Почему JavaScript иногда указывает неверный день в строке даты?

Поскольку новая дата('ГГГГ-ММ-ДД') в некоторых средах может интерпретироваться как UTC. Если вас волнует дата местного календаря, проанализируйте части и используйте new Date(y, m, d).