Vanuskalkulaator — Täpne vanus aastates, kuudes ja päevades
Tasuta vanuskalkulaator: sisestage oma sünniaeg, et saada oma täpne vanus aastates, kuudes ja päevades, pluss kogu nädalate arv, päevade arv, tunnid ja teie järgmine sünnipäev.
Vanuskalkulaator
Te sündisite Monday
Järgmine sünnipäev: 127 päeva pärast (turning 37)
Teie vanus teistes ühikutes
Elu edenemine
Teie vanus illustraatilise 80-aastase viitemahu vastu.
Dokumentatsioon
Mis on vanusekalkulaator?
Vanusekalkulaator leiab kahe kuupäeva, sünnikuupäeva ja sihtkuupäeva, tavaliselt tänase kuupäeva, vahelise täpse ajavahemiku. Tulemus esitatakse aastate, kuude ja päevadena ning ka jookseva kogusummana kuudes, nädalates, päevades, tundides, minutites ja sekundites. Vanust saab arvutada ka mineviku- või tulevikukuupäeva seisuga, et näha, kui vana inimene sel päeval oli või saab olema.
Kuidas vanust arvutada
Vanus on kahe kalendrikuupäeva vahe. Selle vahe kirjeldamiseks on kaks õiget viisi ning mõlemad on eri otstarbel kasulikud.
Kalendrijärgne vanus (aastad, kuud, päevad)
See on igapäevane viis vanuse väljendamiseks, näiteks „33 aastat, 4 kuud ja 5 päeva vana”. See leitakse kolme sammuga:
- Loendage sünnikuupäevast möödunud täisaastad.
- Loendage viimasest sünnipäevast möödunud täiskuud.
- Seejärel loendage allesjäänud päevad.
Samm 3 muutub kuu lõpu lähedal keerukaks, sest kõigis kuudes ei ole sama palju päevi. Inimene, kes on sündinud 31. jaanuaril ja kelle vanust mõõdetakse 1. märtsil, on 1 kuu ja 1 päeva vana. Üks kuu pärast kuupäeva 31. jaanuar on 28. veebruar (liigaastal 29. veebruar), sest 31. veebruari ei ole. 1. märts on sellest üks päev hiljem. Seda meetodit, mida nimetatakse mõnikord ka relativedelta-reegliks seda populariseerinud Pythoni teegi järgi, kasutatakse aastapäeva kuupäeva kohandamiseks lühema kuu viimasele päevale, nii et päevade arv ei muutuks kunagi negatiivseks.
Kogu möödunud aeg (päevad, tunnid, sekundid)
Täpse elatud aja arvutamiseks teisendatakse mõlemad kuupäevad üheks ajahetkeks ja vahe leitakse täispäevades:
kus d on täispäevade arv, t sihtkuupäev ja b sünnikuupäev, kõik millisekundites väljendatud arvuna, ning jagaja on ühes päevas olevate millisekundite arv.
Enne lahutamist seatakse mõlemad kuupäevad UTC (koordineeritud maailmaaja) kesköösse. See takistab suveaja muutustel tunni lisamist või eemaldamist ja päevade arvu moonutamist. Päevade koguarvust saadakse nädalad, jagades päevad 7-ga ja ümardades allapoole. Tunnid, minutid ja sekundid saadakse päevade arvu korrutamisel vastavalt 24, 1 440 ja 86 400-ga.
Päevade koguarvu jagamine 365 või 365,25-ga annab ligikaudse vanuse aastates, kuid ei arvesta, millised selle ajavahemiku aastad olid liigaastad. Eespool kirjeldatud kalendripõhine arvestus on täpne. Küsimusele „kui vana ma olen?” vastamiseks kasutage kalendrijärgset vanust. Täpset möödunud aega nõudvate ülesannete, näiteks ravimiannuste ajastamise või tähtajani jäänud aja loendamise korral kasutage päevi või nädalaid.
Näidisarvutus
Inimene, kes on sündinud kuupäeval 1. jaanuar 2000 ja kelle vanust mõõdetakse kuupäeva 1. jaanuar 2020 seisuga:
| Mõõt | Väärtus |
|---|---|
| Kalendrijärgne vanus | 20 aastat, 0 kuud, 0 päeva |
| Kuude koguarv | 240 |
| Nädalate koguarv | 1 043 |
| Päevade koguarv | 7 305 |
| Tundide koguarv | 175 320 |
| Minutite koguarv | 10 519 200 |
| Sekundite koguarv | 631 152 000 |
| Sünnipäeva nädalapäev | Laupäev |
Päevade koguarv 7 305 võrdub korrutisega 20 × 365, millele lisandub 5 liigaastapäeva järgmistel liigaastatel: 2000, 2004, 2008, 2012 ja 2016. Igaüks neist aastatest lisas 29. veebruari, mis jääb selle 20 aasta pikkuse ajavahemiku sisse. Seetõttu on päevade arv suurem kui lihtne korrutis 20 × 365 ning käsitsi arvutades on lihtne mõne päevaga eksida.
Vanuse arvutamise valem koodis
Eespool kirjeldatud kalendrijärgse vanuse meetodit saab rakendada enamikus programmeerimiskeeltes. Sisseehitatud kuupäevateegi kasutamine on turvalisem kui liigaasta- ja kuupikkuse reeglite käsitsi programmeerimine.
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 hoiatab, et argument "md" võib kuu piiril tagastada negatiivse arvu või vale
päevade arvu, mistõttu selle valemi allesjäänud päevade osa ei
ühti alati eespool kirjeldatud kohandamisreegliga.
Korduma kippuvad küsimused
Kuidas leida oma täpne vanus? Sisestage sünnikuupäev ja jätke sihtkuupäevaks tänane kuupäev. Tulemus näitab vanust aastates, kuudes ja päevades ning sama vanust ka päevade, nädalate, tundide ja sekundite koguarvuna.
Miks annavad kaks vanusekalkulaatorit erineva tulemuse? Erinevus tuleneb tavaliselt sellest, kuidas loendatakse kuu piiri lähedal allesjäänud päevi. Kalkulaator, mis kohandab kuu lõpus kuupäeva lühema kuu järgi, nagu eespool kirjeldatud, võib erineda ühe või kahe päeva võrra kalkulaatorist, mis lihtsalt jagab möödunud aja 30-ga.
Kas arvutuses võetakse liigaastaid arvesse? Jah. Päevade koguarv sisaldab iga kahe kuupäeva vahele jäävat 29. veebruari. Aastal, milles ei ole 29. veebruari, loetakse liigaastal sündinu sünnipäevaks 28. veebruar, selle kuu viimane päev. 29. veebruar 1996 sündinud inimene on 26 aasta, 11 kuud ja 22 päeva vana kuupäeval 20. veebruar 2023 ning tema järgmine sünnipäev on 8 päeva hiljem, kuupäeval 28. veebruar 2023.
Kas vanust saab arvutada mineviku- või tulevikukuupäeva seisuga? Jah. Kui sihtkuupäevaks määrata tulevikukuupäev, näitab tulemus, kui vana inimene sel päeval saab olema. Minevikukuupäeva korral näitab see, kui vana ta sel ajal oli. Sünnikuupäev ei saa olla tulevikus ning sihtkuupäev ei saa olla sünnikuupäevast varasem.
Kas ajavööndid mõjutavad tulemust? Ei. Mõlemad kuupäevad teisendatakse enne päevade arvu leidmist UTC keskööks, mistõttu kogusumma jääb kasutaja asukohast või suveaja muutustest sõltumata samaks.
Miks erineb päevade arv päevade jagamisel 365,25 saadavast tulemusest? 365,25 on ainult aasta keskmine pikkus; see ei näita, millised konkreetsed aastad selles ajavahemikus olid 366 päeva pikkused liigaastad. Kahe tegeliku kalendrikuupäeva vaheliste täispäevade loendamine on täpne.
Allikad
- Python
dateutil—relativedelta, eespool kirjeldatud kalendrijärgse vanuse kuu- ja päevareegel. - Java platvorm —
Period.betweenjaChronoUnit.DAYS. - Microsoft Excel — funktsioon
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N. ja Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.