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 nøjagtige tid mellem to datoer: en fødselsdato og en måldato, som regel i dag. Den angiver resultatet i år, måneder og dage samt som en løbende total i måneder, 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 vil være på den pågældende 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 hen mod slutningen af en måned, fordi månederne ikke alle har samme antal dage. En person, der er født den 31. januar, og hvis alder måles den 1. marts, er 1 måned og 1 dag gammel. En måned efter den 31. januar er den 28. februar (eller den 29. februar i et skudår), eftersom der ikke findes en 31. februar. Den 1. marts er dagen efter. Denne metode, der undertiden kaldes reglen relativedelta efter det Python-bibliotek, som gjorde den udbredt, begrænser årsdagen til den sidste dag i den kortere måned, så dagstallet 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:
hvor d er antallet af hele dage, t måldatoen og b fødselsdatoen, hver angivet som et antal millisekunder, og divisoren er antallet af millisekunder på én dag.
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 |
| Samlede måneder | 240 |
| Samlede uger | 1.043 |
| Samlede dage | 7.305 |
| Samlede timer | 175.320 |
| Samlede minutter | 10.519.200 |
| Samlede sekunder | 631.152.000 |
| Ugedag for fødslen | Lørdag |
Det samlede antal på 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, der falder inden for perioden på 20 år. Derfor er dagstallet højere end en simpel 20 × 365, og derfor er det let at få et forkert resultat på nogle få dage, hvis man beregner 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
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 advarer om, at argumentet "md" kan returnere et negativt tal eller et forkert
dagstal nær månedsskift, så den del af formlen, der beregner de resterende dage, ikke
altid stemmer overens med begrænsningsreglen ovenfor.
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 dagstal omfatter hver 29. februar, der falder mellem de to datoer. I et år uden en 29. februar regnes årsdagen for en person født på en skuddag som 28. februar, den sidste dag i måneden. En person, der er født den 29. februar 1996, er 26 år, 11 måneder og 22 dage gammel den 20. februar 2023, og den næste fødselsdag falder 8 dage senere, den 28. februar 2023.
Kan alder beregnes for en dato i fortiden eller fremtiden? Ja. Hvis måldatoen sættes til en fremtidig dato, vises det, hvor gammel personen vil være på den pågældende dag. Hvis den sættes til en tidligere dato, vises det, hvor gammel personen var. Fødselsdatoen kan ikke ligge i fremtiden, og måldatoen kan ikke ligge før fødselsdatoen.
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.
Kilder
- Python
dateutil—relativedelta, reglen for måneder og dage ved kalenderalder, som er beskrevet ovenfor. - Java-platformen —
Period.betweenogChronoUnit.DAYS. - Microsoft Excel — funktionen
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N. og Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.