Kalkulator starosti — Natančna starost v letih, mesecih in dneh
Brezplačni kalkulator starosti: vnesite datum rojstva in dobite natančno starost v letih, mesecih in dneh, ter skupne tedne, dneve, ure in vaš naslednji rojstni dan.
Kalkulator starosti
Rodili ste se na Monday
Naslednji rojstni dan: 127 dni od zdaj (sledi 37)
Vaša starost v drugih enotah
Napredek v življenju
Vaša starost glede na ilustrativno referenčno obdobje 80 let.
Dokumentacija
Kaj je kalkulator starosti?
Kalkulator starosti izračuna natančen čas med dvema datumoma: datumom rojstva in ciljnim datumom, običajno današnjim dnem. Rezultat prikaže v letih, mesecih in dnevih ter tudi kot skupno število mesecev, tednov, dni, ur, minut in sekund. Starost je mogoče izračunati tudi za pretekli ali prihodnji datum, kar pokaže, koliko je bila oseba stara oziroma koliko bo stara na ta dan.
Kako izračunati starost
Starost je razlika med dvema koledarskima datumoma. To razliko je mogoče pravilno opisati na dva načina, oba pa sta uporabna za različne namene.
Koledarska starost (leta, meseci, dnevi)
To je običajen način navajanja starosti, na primer »33 let, 4 mesece in 5 dni«. Izračuna se v treh korakih:
- Preštejte dopolnjena leta, ki so minila od datuma rojstva.
- Od zadnjega rojstnega dne preštejte dopolnjene mesece, ki so minili.
- Nato preštejte preostale dni.
Korak 3 je proti koncu meseca zapleten, ker nimajo vsi meseci enakega števila dni. Oseba, rojena 31. januarja, katere starost se meri 1. marca, je stara 1 mesec in 1 dan. En mesec po 31. januarju je 28. februar (oziroma 29. februar v prestopnem letu), saj 31. februar ne obstaja. 1. marec je en dan pozneje. Ta metoda, včasih imenovana pravilo relativedelta po knjižnici Python, ki ga je uveljavila, datum obletnice prilagodi zadnjemu dnevu krajšega meseca, tako da število dni nikoli ni negativno.
Skupni pretečeni čas (dnevi, ure, sekunde)
Za natančno štetje preživetega časa se oba datuma pretvorita v eno samo časovno točko, nato pa se izračuna razlika v celih dnevih:
kjer je d število celih dni, t ciljni datum in b datum rojstva, pri čemer je vsak od njih izražen kot število milisekund, delitelj pa je število milisekund v enem dnevu.
Pred odštevanjem se oba datuma nastavita na polnoč UTC (koordinirani univerzalni čas). Tako spremembe poletnega časa ne dodajo ali odvzamejo ure in ne izkrivijo števila dni. Iz skupnega števila dni se število tednov izračuna kot dnevi, deljeni z 7 in zaokroženi navzdol. Število ur, minut in sekund je enako številu dni, pomnoženemu z 24, 1.440 oziroma 86.400.
Če skupno število dni delite z 365 ali 365,25, dobite približno starost v letih, vendar pri tem ni upoštevano, katera leta v tem obdobju so bila prestopna. Koledarsko štetje, opisano zgoraj, je natančno. Koledarsko starost uporabite za odgovor na vprašanje »koliko sem star?«. Skupno število dni ali tednov uporabite pri opravilih, ki zahtevajo natančen pretečeni čas, na primer pri določanju časa za odmerjanje zdravil ali odštevanju do pomembnega dogodka.
Rešen primer
Oseba, rojena 1. januar 2000, katere starost se meri na 1. januar 2020:
| Merilo | Vrednost |
|---|---|
| Koledarska starost | 20 let, 0 mesecev, 0 dni |
| Skupno število mesecev | 240 |
| Skupno število tednov | 1.043 |
| Skupno število dni | 7.305 |
| Skupno število ur | 175.320 |
| Skupno število minut | 10.519.200 |
| Skupno število sekund | 631.152.000 |
| Dan v tednu rojstva | Sobota |
Skupno število 7.305 dni je enako 20 × 365 plus 5 prestopnih dni za prestopna leta 2000, 2004, 2008, 2012 in 2016. Vsako od teh let je imelo dodaten 29. februar, ki spada v 20-letno obdobje. Zato je število dni večje od preprostega izračuna 20 × 365, ročni izračun pa se lahko zlahka zmoti za nekaj dni.
Formula za izračun starosti v kodi
Zgoraj opisano metodo koledarske starosti je mogoče izvajati v večini programskih jezikov. Uporaba vgrajene knjižnice za datume je varnejša od ročnega zapisovanja pravil za prestopna leta in dolžine mesecev.
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 opozarja, da lahko argument "md" blizu meja mesecev vrne negativno število ali napačno
število dni, zato del te formule s preostalimi dnevi
ni vedno skladen z zgoraj opisanim pravilom prilagoditve.
Pogosta vprašanja
Kako ugotovim svojo natančno starost? Vnesite datum rojstva, ciljni datum pa pustite nastavljen na današnji dan. Rezultat prikaže starost v letih, mesecih in dnevih ter enako starost v skupnem številu dni, tednov, ur in sekund.
Zakaj dva kalkulatorja starosti prikažeta različna rezultata? Razlika je običajno v načinu štetja preostalih dni blizu meje meseca. Kalkulator, ki ob koncu meseca starost omeji na krajši mesec, kot je opisano zgoraj, se lahko za dan ali dva razlikuje od kalkulatorja, ki pretečeni čas preprosto deli z 30.
Ali izračun upošteva prestopna leta? Da. Skupno število dni vključuje vsak 29. februar, ki spada med oba datuma. V letu brez 29. februarja se obletnica rojstva na prestopni dan šteje kot 28. februar, zadnji dan tega meseca. Oseba, rojena 29. februar 1996, je 26 let, 11 mesecev in 22 dni stara na 20. februar 2023, njen naslednji rojstni dan pa nastopi 8 dni pozneje, na 28. februar 2023.
Ali je mogoče starost izračunati za datum v preteklosti ali prihodnosti? Da. Če ciljni datum nastavite na datum v prihodnosti, vidite, koliko bo oseba takrat stara. Če ga nastavite na datum v preteklosti, vidite, koliko je bila takrat stara. Datum rojstva ne sme biti v prihodnosti, ciljni datum pa ne sme biti pred datumom rojstva.
Ali časovni pasovi vplivajo na rezultat? Ne. Oba datuma se pred štetjem dni pretvorita v polnoč UTC, zato skupni rezultat ostane enak ne glede na uporabnikovo lokacijo ali spremembe poletnega časa.
Zakaj se število dni razlikuje od deljenja dni z 365,25? 365,25 je le povprečna dolžina leta; ne upošteva, katera posamezna leta v tem obdobju so prestopna leta s 366 dnevi. Štetje celih dni med dvema dejanskima koledarskima datumoma je natančno.
Viri
- Python
dateutil—relativedelta, zgoraj opisano pravilo za mesece in dneve pri izračunu koledarske starosti. - Platforma Java —
Period.betweeninChronoUnit.DAYS. - Microsoft Excel — funkcija
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N., in Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.