Як обчислити вік у JavaScript (DOB у роки, місяці, дні)
Дізнайтеся про практичні способи обчислення віку за датою народження в JavaScript. Включає точні роки, місяці, дні, параметр поточної дати та типові підводні камені, як-от часові пояси та високосні роки.
Якщо вам потрібно обчислити вік людини за датою народження (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 березня). Будьте послідовними.
- Недійсні введення: перевірте, що дата народження є дійсною, а не в майбутньому.
Швидкий варіант: скористайтеся онлайн-калькулятором віку
Якщо випросто потрібна відповідь (або ви хочете перевірити свою реалізацію), скористайтеся нашим безкоштовним калькулятором: Обчисліть вік онлайн.
Схожі посібники
- Як обчислити вік у Excel
- Як розрахувати вік у Google Таблицях
- Переглянути всі посібники з розрахунку віку
Поширені запитання
Який найточніший спосіб обчислити вік?
У більшості випадків стандартом є «повні роки» (вік у цілі роки). Якщо вам потрібна повна розбивка, спочатку обчисліть роки, потім місяці, потім дні та перевірте крайні випадки, наприклад тривалість місяця та високосні роки.
Чому JavaScript іноді вказує неправильний день у рядку дати?
Оскільки нову дату ('РРРР-ММ-ДД') у деяких середовищах можна інтерпретувати як UTC. Якщо вам важлива дата місцевого календаря, проаналізуйте частини та використовуйте нову дату (y, m, d).