Kalkulačka věku — Přesný věk v letech, měsících a dnech
Bezplatná kalkulačka věku: zadej své datum narození a získej svůj přesný věk v letech, měsících a dnech, plus celkový počet týdnů, dní, hodin a tvoje další narozeniny.
Kalkulačka věku
Narodil/a ses v Monday
Další narozeniny: Za 127 dní (dosáhneš 37)
Tvůj věk v jiných jednotkách
Postup v životě
Tvůj věk v porovnání s ilustrativním 80letým referenčním obdobím.
Dokumentace
Co je kalkulačka věku?
Kalkulačka věku zjišťuje přesný čas mezi dvěma daty: datem narození a cílovým datem, obvykle dneškem. Výsledek uvádí v letech, měsících a dnech a také jako průběžný součet v týdnech, dnech, hodinách, minutách a sekundách. Věk lze vypočítat i pro minulé nebo budoucí datum, což ukáže, kolik let osobě bylo nebo bude v onen den.
Jak vypočítat věk
Věk je rozdíl mezi dvěma kalendářními daty. Tento rozdíl lze správně popsat dvěma způsoby a oba se hodí k jiným účelům.
Kalendářní věk (roky, měsíce, dny)
Takto lidé svůj věk běžně uvádějí, například „33 let, 4 měsíce a 5 dní“. Zjišťuje se ve třech krocích:
- Spočítejte celé roky, které uplynuly od data narození.
- Od posledních narozenin spočítejte celé uplynulé měsíce.
- Poté spočítejte zbývající dny.
Krok 3 bývá obtížný na konci měsíce, protože ne všechny měsíce mají stejný počet dnů. Člověku narozenému 31. ledna, jehož věk se měří k 1. března, je 1 měsíc a 1 den. Jeden měsíc po 31. ledna je 28. února (nebo 29. února v přestupném roce), protože 31. února neexistuje. 1. března je o den později. Tento postup, někdy nazývaný pravidlo relativedelta podle knihovny Pythonu, která ho zpopularizovala, posouvá datum výročí na poslední den kratšího měsíce, takže počet dnů nikdy nevyjde záporný.
Celkový uplynulý čas (dny, hodiny, sekundy)
Pro přesný výpočet prožitého času se obě data převedou na jediný časový okamžik a rozdíl se určí v celých dnech:
dny = floor((cílové datum − datum narození) ÷ 86 400 000 milisekund)
Před odečtením se obě data nastaví na půlnoc UTC (koordinovaného světového času). Tím se zabrání tomu, aby změny letního času přidaly nebo odebraly hodinu a zkreslily počet dní. Z celkového počtu dní se týdny získají dělením 7 a zaokrouhlením dolů. Počet hodin, minut a sekund se vypočítá vynásobením počtu dní hodnotami 24, 1 440 a 86 400.
Vydělení celkového počtu dní hodnotou 365 nebo 365,25 poskytne přibližný věk v letech, ale nezohlední, které roky v daném období byly přestupné. Kalendářní výpočet popsaný výše je přesný. Kalendářní věk použijte pro odpověď na otázku „kolik mi je let“. Celkový počet dní nebo týdnů je vhodný pro úlohy vyžadující přesný uplynulý čas, například pro načasování dávek léků nebo odpočítávání do významné události.
Praktický příklad
Člověk narozený 1. ledna 2000, jehož věk se měří k 1. ledna 2020:
| Údaj | Hodnota |
|---|---|
| Kalendářní věk | 20 let, 0 měsíců, 0 dní |
| Celkem dní | 7 305 |
| Celkem týdnů | 1 043 |
| Den v týdnu narození | Sobota |
Celkový počet 7 305 dní odpovídá 20 × 365 plus 5 přestupných dnů za přestupné roky 2000, 2004, 2008, 2012 a 2016. Každý z těchto roků přidal 29. února, které spadá do období 20 let. Proto je počet dnů vyšší než prosté 20 × 365 a proto se při ručním výpočtu snadno spletete o několik dnů.
Vzorec pro výpočet věku v kódu
Výše uvedenou metodu výpočtu kalendářního věku lze implementovat ve většině programovacích jazyků. Použití vestavěné knihovny pro práci s daty je bezpečnější než ruční zapisování pravidel pro přestupné roky a délku měsíců.
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 nedoporučuje jednotku „MD“ funkce DATEDIF. Může vrátit záporné číslo, nulu nebo nepřesný výsledek.
Často kladené otázky
Jak zjistím svůj přesný věk? Zadejte datum narození a cílové datum ponechte na dnešku. Výsledek uvádí věk v letech, měsících a dnech spolu se stejným věkem vyjádřeným v celkovém počtu dní, týdnů, hodin a sekund.
Proč dvě kalkulačky věku poskytují různé výsledky? Rozdíl obvykle spočívá ve způsobu počítání zbývajících dní v okolí hranice měsíce. Kalkulačka, která na konci měsíce nastaví datum na poslední den kratšího měsíce, jak je popsáno výše, se může lišit o jeden nebo dva dny od kalkulačky, která uplynulý čas jednoduše dělí hodnotou 30.
Zohledňuje výpočet přestupné roky? Ano. Celkový počet dnů zahrnuje každé 29. února, které leží mezi oběma daty, a datum narození 29. února se v nepřestupných letech porovnává s 28. února.
Lze věk vypočítat pro datum v minulosti nebo budoucnosti? Ano. Nastavením cílového data na budoucí datum se zobrazí, kolik let bude člověku v onen den. Nastavením na minulé datum se zobrazí, kolik let mu bylo.
Ovlivňují výsledek časová pásma? Ne. Před výpočtem počtu dní se obě data převedou na půlnoc UTC, takže celkový výsledek zůstává stejný bez ohledu na polohu uživatele nebo změny letního času.
Proč se počet dní liší od dělení počtu dní hodnotou 365,25? 365,25 je pouze průměrná délka roku; neudává, které konkrétní roky v daném období mají 366 dní a jsou přestupné. Počítání celých dní mezi dvěma skutečnými kalendářními daty je přesné.
Reference
- dateutil project. relativedelta. dokumentace dateutil relativedelta — když by přidaný měsíc přesáhl konec kratšího měsíce, použije se poslední den onoho měsíce.
- MDN Web Docs (Mozilla). Date. MDN: reference objektu Date — datum v JavaScriptu je počet milisekund od 1. ledna 1970 UTC; ±8,64 × 10¹⁵ ms odpovídá ±100 000 000 dnům, takže jeden den je 86 400 000 ms.
- U.S. Naval Observatory. Leap Years. USNO: časté dotazy k přestupným rokům — roky dělitelné 4 jsou přestupné, kromě století, která nejsou dělitelná 400; 2000 je přestupný rok.
- Microsoft. DATEDIF function. Podpora Microsoftu: DATEDIF — jednotky „Y“, „YM“ a „MD“ a známá omezení jednotky „MD“.