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

Як обчислити вік у JavaScript (DOB у роки, місяці, дні)

Дізнайтеся про практичні способи обчислення віку за датою народження в JavaScript. Включає точні роки, місяці, дні, параметр поточної дати та типові підводні камені, як-от часові пояси та високосні роки.

Як обчислити вік у JavaScript (DOB у роки, місяці, дні)

Якщо вам потрібно обчислити вік людини за датою народження (DOB) у JavaScript, ви можете зробити це кількома різними способами. Головне – визначити, що ви маєте на увазі під віком:

  • Вік у повних роках (найчастіше)
  • Точний вік (роки, місяці, дні)
  • Вік на певну дату (не завжди сьогодні)

1) Розрахувати вік у повних роках (просто та правильно)

Це стандартний підхід: відніміть роки та відкоригуйте, якщо цього року ще не було дня народження.

функція ageInYears(dob, asOf = new Date()) {
  const народження = нова дата (dob);
  const ref = нова дата (asOf);

  let years = ref.getFullYear() - birth.getFullYear();
  const m = ref.getMonth() - birth.getMonth();

  if (m < 0 || (m === 0 && ref.getDate() < birth.getDate())) {
    років--;
  }

  повернути роки;
}

Приклад: Дата народження 2000-02-10 і станом на 2026-02-09 дає 25 (завтра день народження).

2) Обчисліть точний вік (роки, місяці, дні)

Якщо вам потрібен точний розподіл, ви можете обчислити спочатку роки, потім місяці, а потім дні, за потреби «позичаючи» з попереднього місяця.

функція exactAge(dob, asOf = new Date()) {
  const народження = нова дата (dob);
  const ref = нова дата (asOf);

  let years = ref.getFullYear() - birth.getFullYear();
  let months = ref.getMonth() - birth.getMonth();
  let days = 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');
exactAge('1995-06-20', '2030-01-01');

Поширені підводні камені (і як їх уникнути)

  • Часові пояси: аналіз РРРР-ММ-ДД може працювати по-різному в різних середовищах. Якщо вам важлива лише дата, створіть дату за місцевим часом: нова дата (рік, місяцьІндекс, день).
  • Дні народження у високосні дні: визначте своє правило для 29 лютого у невисокосні роки (28 лютого або 1 березня). Будьте послідовними.
  • Недійсні введення: перевірте, що дата народження є дійсною, а не в майбутньому.

Швидкий варіант: скористайтеся онлайн-калькулятором віку

Якщо випросто потрібна відповідь (або ви хочете перевірити свою реалізацію), скористайтеся нашим безкоштовним калькулятором: Обчисліть вік онлайн.

Схожі посібники

Поширені запитання

Який найточніший спосіб обчислити вік?

У більшості випадків стандартом є «повні роки» (вік у цілі роки). Якщо вам потрібна повна розбивка, спочатку обчисліть роки, потім місяці, потім дні та перевірте крайні випадки, наприклад тривалість місяця та високосні роки.

Чому JavaScript іноді вказує неправильний день у рядку дати?

Оскільки нову дату ('РРРР-ММ-ДД') у деяких середовищах можна інтерпретувати як UTC. Якщо вам важлива дата місцевого календаря, проаналізуйте частини та використовуйте нову дату (y, m, d).