Калкулатор на възраст — Точна възраст в години, месеци и дни
Безплатен калкулатор на възраст: въведете вашата дата на раждане, за да получите точната си възраст в години, месеци и дни, плюс общо седмици, дни, часове и вашия следващ рожден ден.
Калкулатор на възраст
Вие сте роден/а на Monday
Следващ рожден ден: 127 дни оттам (навършваща 37)
Вашата възраст в други единици
Напредък на живота
Вашата възраст спрямо илюстративен 80-годишен референтен период.
Документация
Какво представлява калкулаторът за възраст?
Калкулаторът за възраст намира точния период между две дати: дата на раждане и целева дата, обикновено днешната. Той показва резултата като години, месеци и дни, както и като общ брой месеци, седмици, дни, часове, минути и секунди. Възрастта може да се изчисли и за минала или бъдеща дата, което показва на колко години е бил или ще бъде човекът на този ден.
Как се изчислява възраст
Възрастта е разликата между две календарни дати. Има два правилни начина да се опише тази разлика и всеки е полезен за различни цели.
Календарна възраст (години, месеци, дни)
Това е обичайният начин, по който хората посочват възрастта си, например „на 33 години, 4 месеца и 5 дни“. Тя се определя на три стъпки:
- Броят се пълните години, изминали от датата на раждане.
- От последния рожден ден се броят пълните изминали месеци.
- След това се броят останалите дни.
Стъпка 3 създава трудности към края на месеца, тъй като месеците нямат еднакъв брой дни. Човек, роден на 31 януари, чиято възраст се измерва на 1 март, е на 1 месец и 1 ден. Един месец след 31 януари е 28 февруари (или 29 февруари във високосна година), тъй като няма 31 февруари. 1 март е един ден след това. Този метод, понякога наричан правилото relativedelta по името на библиотеката за Python, която го популяризира, ограничава датата на годишнината до последния ден на по-краткия месец, така че броят на дните никога да не става отрицателен.
Общо изминало време (дни, часове, секунди)
За прецизно изчисляване на изживяното време и двете дати се преобразуват в една времева точка и разликата се изчислява в цели дни:
където d е броят на целите дни, t е целевата дата, а b е датата на раждане, като всяка от тях се представя като брой милисекунди, а делителят е броят милисекунди в едно денонощие.
И двете дати се задават на полунощ по UTC (координирано универсално време) преди изваждането. Това предотвратява добавянето или премахването на час при преминаване към лятно часово време и изкривяването на броя дни. От общия брой дни седмиците се получават чрез деление на 7 и закръгляне надолу. Часовете, минутите и секундите са броят дни, умножен съответно по 24, 1 440 и 86 400.
Делението на общия брой дни на 365 или 365,25 дава приблизителна възраст в години, но не отчита кои години в този период са високосни. Календарното броене, описано по-горе, е точно. Използвайте календарната възраст, за да отговорите на въпроса „На колко години съм?“. Използвайте общия брой дни или седмици за задачи, които изискват прецизно изминало време, например определяне на времето за прием на лекарствени дози или отброяване до важен момент.
Пример с решение
Човек, роден на 1 януари 2000 г., чиято възраст се измерва на 1 януари 2020 г.:
| Мярка | Стойност |
|---|---|
| Календарна възраст | 20 години, 0 месеца, 0 дни |
| Общо месеци | 240 |
| Общо седмици | 1 043 |
| Общо дни | 7 305 |
| Общо часове | 175 320 |
| Общо минути | 10 519 200 |
| Общо секунди | 631 152 000 |
| Ден от седмицата на раждане | Събота |
Общият брой от 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
111const MS_PER_DAY = 86400000;
2
3// Add n months, clamping the day to the target month's last day
4// (31 January + 1 month = 28 February). Date.UTC on its own does not
5// clamp: it would roll that date forward into March.
6function addMonthsUTC(base, n) {
7 const total = base.getUTCMonth() + n;
8 const y = base.getUTCFullYear() + Math.floor(total / 12);
9 const m = ((total % 12) + 12) % 12;
10 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
11 return Date.UTC(y, m, Math.min(base.getUTCDate(), lastDay));
12}
13
14function calendarAge(birth, target) {
15 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
16 + (target.getUTCMonth() - birth.getUTCMonth());
17 if (addMonthsUTC(birth, months) > target.getTime()) months -= 1;
18 const anchor = addMonthsUTC(birth, months);
19 return {
20 years: Math.floor(months / 12),
21 months: months % 12,
22 days: Math.floor((target.getTime() - anchor) / MS_PER_DAY),
23 };
24}
25
26const birth = new Date(Date.UTC(2000, 0, 1));
27const target = new Date(Date.UTC(2020, 0, 1));
28
29calendarAge(birth, target); // { years: 20, months: 0, days: 0 }
30Math.floor((target - birth) / MS_PER_DAY); // 7305
311' 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" може да върне отрицателно число или неправилен брой дни
в близост до границите между месеците, затова частта за оставащите дни във формулата
не винаги съвпада с описаното по-горе правило за ограничаване.
Често задавани въпроси
Как да намеря точната си възраст? Въведете дата на раждане и задайте днешната дата като целева. Резултатът показва възрастта в години, месеци и дни, както и същата възраст като общ брой дни, седмици, часове и секунди.
Защо два калкулатора за възраст дават различни отговори? Разликата обикновено е в начина, по който се броят оставащите дни в близост до границата между месеците. Калкулатор, който ограничава датата до по-краткия месец в края на месеца, както е описано по-горе, може да се различава с един или два дни от калкулатор, който просто разделя изминалото време на 30.
Изчислението отчита ли високосните години? Да. Общият брой дни включва всеки 29 февруари, който попада между двете дати. В година без 29 февруари годишнината от раждането на човек, роден във високосен ден, се брои като 28 февруари, последния ден от този месец. Човек, роден на 29 февруари 1996 г., е на 26 години, 11 месеца и 22 дни на 20 февруари 2023 г., а следващият му рожден ден се пада 8 дни по-късно — на 28 февруари 2023 г..
Може ли възрастта да се изчисли за дата в миналото или бъдещето? Да. Задаването на бъдеща дата показва на колко години ще бъде човекът на този ден. Задаването на минала дата показва на колко години е бил. Самата дата на раждане не може да бъде в бъдещето, а целевата дата не може да предхожда датата на раждане.
Влияят ли часовите зони върху резултата? Не. И двете дати се преобразуват в полунощ по UTC преди изчисляването на броя дни, така че общият резултат остава същият независимо от местоположението на потребителя или промените към лятно часово време.
Защо броят на дните се различава от делението на дните на 365,25? 365,25 е само средната продължителност на годината; той не отчита кои конкретни години в периода са високосни години с 366 дни. Броенето на целите дни между две реални календарни дати е точно.
Източници
- Python
dateutil—relativedelta, описаното по-горе правило за месеците и дните при изчисляване на календарна възраст. - Java Platform —
Period.betweenиChronoUnit.DAYS. - Microsoft Excel — функцията
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N., и Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.