Aldersberegner — Præcis alder i år, måneder og dage
Gratis aldersberegner: indtast din fødselsdato for at få din præcise alder i år, måneder og dage, plus samlet uger, dage, timer og din næste fødselsdag.
Aldersberegner
Du blev født på en Monday
Næste fødselsdag: 127 dage væk (bliver 37)
Din alder i andre enheder
Livets fremskridt
Din alder i forhold til et illustrativt 80-årigt referencespan.
Dokumentation
Hvad er en aldersberegner?
En aldersberegner finder den præcise tid mellem to datoer: en fødselsdato og en måldato, normalt i dag. Resultatet vises som år, måneder og dage og desuden som en løbende sum i uger, dage, timer, minutter og sekunder. Alder kan også beregnes for en dato i fortiden eller fremtiden, hvilket viser, hvor gammel en person var eller bliver på den dag.
Sådan beregnes alder
Alder er forskellen mellem to kalenderdatoer. Der er to korrekte måder at beskrive denne forskel på, og begge er nyttige til forskellige formål.
Kalenderalder (år, måneder, dage)
Dette er den almindelige måde, folk angiver deres alder på, for eksempel "33 år, 4 måneder og 5 dage gammel." Den findes i tre trin:
- Tæl de hele år, der er gået siden fødselsdatoen.
- Tæl fra den seneste fødselsdag de hele måneder, der er gået.
- Tæl derefter de resterende dage.
Trin 3 bliver vanskeligt nær slutningen af en måned, fordi måneder ikke alle har lige mange dage. En person født den 31. januar, hvis alder måles den 1. marts, er 1 måned og 1 dag gammel. En måned efter 31. januar er 28. februar (eller 29. februar i et skudår), da der ikke findes nogen 31. februar. 1. marts er én dag efter det. Denne metode, som af og til kaldes relativedelta-reglen efter det Python-bibliotek, der gjorde den udbredt, begrænser årsdagsdatoen til den sidste dag i den kortere måned, så antallet af dage aldrig bliver negativt.
Samlet forløbet tid (dage, timer, sekunder)
For at tælle den levede tid præcist omregnes begge datoer til et enkelt tidspunkt, og forskellen beregnes i hele dage:
dage = floor((måldato − fødselsdato) ÷ 86.400.000 millisekunder)
Begge datoer sættes til midnat efter UTC (koordineret universaltid), før subtraktionen foretages. Det forhindrer, at skift til og fra sommertid tilføjer eller fjerner en time og forvrider dagstallet. Ugeantallet fås ved at dividere det samlede antal dage med 7 og runde ned. Timer, minutter og sekunder fås ved at gange dagstallet med henholdsvis 24, 1.440 og 86.400.
Hvis det samlede antal dage divideres med 365 eller 365,25, fås en omtrentlig alder i år, men metoden ved ikke, hvilke år i perioden der var skudår. Kalenderberegningen, der er beskrevet ovenfor, er nøjagtig. Brug kalenderalder til at besvare spørgsmålet "hvor gammel er jeg". Brug det samlede antal dage eller uger til opgaver, der kræver præcis forløbet tid, for eksempel tidsfastsættelse af medicindoser eller nedtælling til en milepæl.
Regneeksempel
En person, der er født den 1. januar 2000, og hvis alder måles den 1. januar 2020:
| Mål | Værdi |
|---|---|
| Kalenderalder | 20 år, 0 måneder, 0 dage |
| Dage i alt | 7.305 |
| Uger i alt | 1.043 |
| Ugedag for fødslen | Lørdag |
I alt 7.305 dage svarer til 20 × 365 plus 5 skuddage, for skudårene 2000, 2004, 2008, 2012 og 2016. Hvert af disse år tilføjede en 29. februar, som falder inden for perioden på 20 år. Det er derfor, antallet af dage er højere end et simpelt 20 × 365, og derfor er det let at regne forkert med et par dage, når man gør det i hånden.
Formel til aldersberegning i kode
Kalenderaldersmetoden ovenfor kan implementeres i de fleste programmeringssprog. Det er sikrere at bruge et indbygget datobibliotek end at skrive reglerne for skudår og månedslængder i hånden.
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 anbefaler ikke enheden „MD“ i DATEDIF. Den kan returnere et negativt tal, nul eller et unøjagtigt resultat.
Ofte stillede spørgsmål
Hvordan finder jeg min nøjagtige alder? Indtast en fødselsdato, og lad måldatoen være i dag. Resultatet viser alderen i år, måneder og dage samt den samme alder som samlet antal dage, uger, timer og sekunder.
Hvorfor giver to aldersberegnere forskellige svar? Forskellen skyldes som regel, hvordan de resterende dage nær et månedsskift tælles. En beregner, der begrænser datoen til den kortere måned ved månedens slutning, som beskrevet ovenfor, kan afvige med en eller to dage fra en beregner, der blot dividerer den forløbne tid med 30.
Tager beregningen højde for skudår? Ja. Det samlede antal dage inkluderer hver 29. februar, der ligger mellem de to datoer, og en fødselsdato på 29. februar måles mod 28. februar i år, der ikke er skudår.
Kan alder beregnes for en dato i fortiden eller fremtiden? Ja. Hvis måldatoen sættes til en fremtidig dato, vises det, hvor gammel en person bliver på den dag. Hvis den sættes til en dato i fortiden, vises det, hvor gammel vedkommende var.
Påvirker tidszoner resultatet? Nej. Begge datoer omregnes til midnat UTC, før dagstallet beregnes, så totalen forbliver den samme uanset brugerens placering eller ændringer til sommertid.
Hvorfor afviger dagstallet fra at dividere dage med 365,25? 365,25 er kun en gennemsnitlig årslængde; tallet tager ikke højde for, hvilke konkrete år i perioden der er skudår med 366 dage. Optælling af hele dage mellem to faktiske kalenderdatoer er nøjagtig.
Referencer
- dateutil project. relativedelta. Dokumentation for dateutil relativedelta — når en tilføjet måned ville passere slutningen af en kortere måned, bruges den sidste dag i den måned.
- MDN Web Docs (Mozilla). Date. MDN-reference for Date — en JavaScript-dato er et antal millisekunder siden 1. januar 1970 UTC; ±8,64 × 10¹⁵ ms svarer til ±100.000.000 dage, så én dag er 86.400.000 ms.
- U.S. Naval Observatory. Leap Years. USNO's FAQ om skudår — år, der er delelige med 4, er skudår, bortset fra hundredårsår, der ikke er delelige med 400; 2000 er et skudår.
- Microsoft. DATEDIF function. Microsoft Support: DATEDIF — enhederne „Y“, „YM“ og „MD“ samt de kendte begrænsninger ved „MD“.