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 zjistí 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 měsíců, týdnů, dnů, hodin, minut a sekund. Věk lze vypočítat i k minulému nebo budoucímu datu, což ukáže, kolik bylo člověku v daný den let nebo kolik mu bude.
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 je složitý na konci měsíce, protože měsíce nemají stejný počet dní. Člověk narozený 31. ledna, jehož věk se měří 1. března, je starý 1 měsíc a 1 den. Jeden měsíc po 31. lednu je 28. února (nebo 29. února v přestupném roce), protože 31. únor neexistuje. 1. březen je o jeden den později. Tato metoda, někdy označovaná jako pravidlo relativedelta podle knihovny Pythonu, která ji zpopularizovala, nastaví výroční datum na poslední den kratšího měsíce, takže počet dní nikdy není 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:
kde d je počet celých dnů, t cílové datum a b datum narození, přičemž všechny jsou vyjádřeny jako počet milisekund a dělitel je počet milisekund v jednom dni.
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.
Příklad výpočtu
Člověk narozený 1. ledna 2000, jehož věk se měří k 1. ledna 2020:
| Míra | Hodnota |
|---|---|
| Kalendářní věk | 20 let, 0 měsíců, 0 dní |
| Celkový počet měsíců | 240 |
| Celkový počet týdnů | 1 043 |
| Celkový počet dní | 7 305 |
| Celkový počet hodin | 175 320 |
| Celkový počet minut | 10 519 200 |
| Celkový počet sekund | 631 152 000 |
| Den v týdnu narození | Sobota |
Celkový počet 7 305 dní se rovná 20 × 365 plus 5 přestupných dnů v přestupných letech 2000, 2004, 2008, 2012 a 2016. Každý z těchto roků přidal 29. únor, který spadá do období dlouhého 20 let. Proto je počet dní vyšší než prosté 20 × 365 a při ručním výpočtu lze snadno udělat chybu v řádu několika 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
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 varuje, že argument "md" může v okolí hranic měsíců vracet záporné číslo nebo nesprávný
počet dní, takže část tohoto vzorce se zbývajícími dny se
ne vždy shoduje s výše uvedeným pravidlem zkrácení.
Č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. únor, který spadá mezi obě data. V roce bez 29. února se výročí narození v přestupný den počítá jako 28. února, tedy poslední den tohoto měsíce. Člověku narozenému 29. února 1996 je k 20. února 2023 26 let, 11 měsíců a 22 dní a jeho další narozeniny připadají o 8 dní později, na 28. února 2023.
Lze věk vypočítat k datu v minulosti nebo budoucnosti? Ano. Nastavení cílového data na datum v budoucnosti ukáže, kolik bude člověku v daný den let. Nastavení na datum v minulosti ukáže, kolik mu tehdy bylo. Datum narození samo nesmí ležet v budoucnosti a cílové datum nesmí předcházet datu narození.
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é.
Zdroje
- Python
dateutil—relativedelta, pravidlo pro měsíce a dny při výpočtu kalendářního věku popsané výše. - Platforma Java —
Period.betweenaChronoUnit.DAYS. - Microsoft Excel — funkce
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N. a Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.