Калкулатор на възраст — Точна възраст в години, месеци и дни
Безплатен калкулатор на възраст: въведете вашата дата на раждане, за да получите точната си възраст в години, месеци и дни, плюс общо седмици, дни, часове и вашия следващ рожден ден.
Калкулатор на възраст
Вие сте роден/а на Monday
Следващ рожден ден: 127 дни оттам (навършваща 37)
Вашата възраст в други единици
Напредък на живота
Вашата възраст спрямо илюстративен 80-годишен референтен период.
Документация
Какво представлява калкулаторът за възраст?
Калкулаторът за възраст намира точното време между две дати: дата на раждане и целева дата, обикновено днешната. Той показва резултата в години, месеци и дни, а също и като общ брой седмици, дни, часове, минути и секунди. Възрастта може да се изчисли и за минала или бъдеща дата, което показва на каква възраст е бил или ще бъде човек в този ден.
Как се изчислява възраст
Възрастта е разликата между две календарни дати. Има два правилни начина да се опише тази разлика и всеки е полезен за различни цели.
Календарна възраст (години, месеци, дни)
Това е обичайният начин, по който хората посочват възрастта си, например „на 33 години, 4 месеца и 5 дни“. Тя се определя на три стъпки:
- Броят се пълните години, изминали от датата на раждане.
- От последния рожден ден се броят пълните изминали месеци.
- След това се броят останалите дни.
Стъпка 3 става сложна към края на месеца, защото не всички месеци имат еднакъв брой дни. Човек, роден на 31 януари, чиято възраст се измерва на 1 март, е на 1 месец и 1 ден. Един месец след 31 януари е 28 февруари (или 29 февруари във високосна година), тъй като няма 31 февруари. 1 март е един ден след това. Този метод, който понякога се нарича правилото relativedelta по името на библиотеката за Python, направила го популярен, привежда датата на годишнината към последния ден на по-краткия месец, така че броят на дните никога да не става отрицателен.
Общо изминало време (дни, часове, секунди)
За прецизно изчисляване на изживяното време и двете дати се преобразуват в една времева точка и разликата се изчислява в цели дни:
дни = цяла част((целева дата − дата на раждане) ÷ 86 400 000 милисекунди)
И двете дати се задават на полунощ по UTC (координирано универсално време) преди изваждането. Това предотвратява добавянето или премахването на час при преминаване към лятно часово време и изкривяването на броя дни. От общия брой дни седмиците се получават чрез деление на 7 и закръгляне надолу. Часовете, минутите и секундите са броят дни, умножен съответно по 24, 1 440 и 86 400.
Делението на общия брой дни на 365 или 365,25 дава приблизителна възраст в години, но не отчита кои години в този период са високосни. Календарното броене, описано по-горе, е точно. Използвайте календарната възраст, за да отговорите на въпроса „На колко години съм?“. Използвайте общия брой дни или седмици за задачи, които изискват прецизно изминало време, например определяне на времето за прием на лекарствени дози или отброяване до важен момент.
Пример с решение
Човек, роден на 1 януари 2000 г., чиято възраст се измерва на 1 януари 2020 г.:
| Показател | Стойност |
|---|---|
| Календарна възраст | 20 години, 0 месеца, 0 дни |
| Общо дни | 7 305 |
| Общо седмици | 1 043 |
| Ден от седмицата на раждане | Събота |
Общият брой от 7 305 дни е равен на 20 × 365 плюс 5 високосни дни, за високосните години 2000, 2004, 2008, 2012 и 2016. Всяка от тези години добавя по един 29 февруари, който попада в рамките на 20-годишния период. Затова броят на дните е по-голям от простото 20 × 365 и затова при ръчно изчисление лесно се получава грешка от няколко дни.
Формула за изчисляване на възрастта в код
Описаният по-горе метод за календарна възраст може да се реализира на повечето програмни езици. Използването на вградена библиотека за дати е по-надеждно от ръчното изписване на правилата за високосните години и дължината на месеците.
1from dateutil.relativedelta import relativedelta
2from datetime import date
3
4birth, target = date(2000, 1, 1), date(2020, 1, 1)
5
6age = relativedelta(target, birth) # calendar age
7print(f"{age.years}y {age.months}m {age.days}d")
8
9total_days = (target - birth).days # total elapsed days
10print(total_days) # 7305
111function addMonthsUTC(d, n) {
2 const total = d.getUTCMonth() + n;
3 const y = d.getUTCFullYear() + Math.floor(total / 12);
4 const m = ((total % 12) + 12) % 12;
5 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
6 return new Date(Date.UTC(y, m, Math.min(d.getUTCDate(), lastDay))); // clamp to month end
7}
8
9function calendarAge(birth, target) {
10 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
11 + (target.getUTCMonth() - birth.getUTCMonth());
12 if (addMonthsUTC(birth, months) > target) months--;
13 const days = Math.floor((target - addMonthsUTC(birth, months)) / 86400000);
14 return { years: Math.floor(months / 12), months: months % 12, days };
15}
16
17const totalDays = Math.floor((target - birth) / 86400000); // 7305
181' Whole days between two dates (A1 = birth, B1 = target):
2=B1-A1
3
4' Calendar age in complete years / months / leftover days:
5=DATEDIF(A1, B1, "y") & " years, " & DATEDIF(A1, B1, "ym") & " months, " & DATEDIF(A1, B1, "md") & " days"
6Microsoft не препоръчва използването на единицата „MD“ на DATEDIF. Тя може да върне отрицателно число, нула или неточен резултат.
Често задавани въпроси
Как да намеря точната си възраст? Въведете дата на раждане и задайте днешната дата като целева. Резултатът показва възрастта в години, месеци и дни, както и същата възраст като общ брой дни, седмици, часове и секунди.
Защо два калкулатора за възраст дават различни отговори? Разликата обикновено е в начина, по който се броят оставащите дни в близост до границата между месеците. Калкулатор, който ограничава датата до по-краткия месец в края на месеца, както е описано по-горе, може да се различава с един или два дни от калкулатор, който просто разделя изминалото време на 30.
Взема ли изчислението предвид високосните години? Да. Общият брой дни включва всеки 29 февруари, който попада между двете дати, а рождена дата 29 февруари се отчита спрямо 28 февруари в годините, които не са високосни.
Може ли възрастта да се изчисли за дата в миналото или в бъдещето? Да. Ако целевата дата е бъдеща, се вижда на каква възраст ще бъде човек в този ден. Ако е минала, се вижда на каква възраст е бил.
Влияят ли часовите зони върху резултата? Не. И двете дати се преобразуват в полунощ по UTC преди изчисляването на броя дни, така че общият резултат остава същият независимо от местоположението на потребителя или промените към лятно часово време.
Защо броят на дните се различава от делението на дните на 365,25? 365,25 е само средната продължителност на годината; той не отчита кои конкретни години в периода са високосни години с 366 дни. Броенето на целите дни между две реални календарни дати е точно.
Източници
- dateutil project. relativedelta. Документация на dateutil relativedelta — когато добавен месец би надхвърлил края на по-къс месец, се използва последният ден на този месец.
- MDN Web Docs (Mozilla). Date. Справка за Date в MDN — датата в JavaScript е брой милисекунди от 1 януари 1970 г. UTC; ±8,64 × 10¹⁵ мс са равни на ±100 000 000 дни, така че един ден е 86 400 000 мс.
- U.S. Naval Observatory. Leap Years. ЧЗВ на USNO за високосните години — годините, които се делят на 4, са високосни, с изключение на вековните години, които не се делят на 400; 2000 е високосна година.
- Microsoft. DATEDIF function. Поддръжка на Microsoft: DATEDIF — единиците „Y“, „YM“ и „MD“ и известните ограничения на „MD“.