Åldersräknare — Exakt ålder i år, månader och dagar
Gratis åldersräknare: ange ditt födelsedatum för att få din exakta ålder i år, månader och dagar, plus totala veckor, dagar, timmar och din nästa födelsedag.
Åldersräknare
Du föddes på en Monday
Nästa födelsedag: 127 dagar bort (blir 37)
Din ålder i andra enheter
Livsfortskridande
Din ålder mot ett illustrativt 80-årsreferensspann.
Dokumentation
Vad är en åldersräknare?
En åldersräknare hittar den exakta tiden mellan två datum: ett födelsedatum och ett måldatum, vanligtvis dagens datum. Resultatet anges i år, månader och dagar samt som en löpande totalsumma i månader, veckor, dagar, timmar, minuter och sekunder. Ålder kan också beräknas för ett datum i det förflutna eller framtiden, vilket visar hur gammal en person var eller kommer att vara den dagen.
Så beräknas ålder
Ålder är avståndet mellan två kalenderdatum. Det finns två korrekta sätt att beskriva detta avstånd, och båda är användbara för olika ändamål.
Kalenderålder (år, månader, dagar)
Detta är det vardagliga sättet att ange sin ålder, till exempel ”33 år, 4 månader och 5 dagar gammal”. Den räknas fram i tre steg:
- Räkna de hela år som har gått sedan födelsedatumet.
- Räkna från den senaste födelsedagen de hela månader som har gått.
- Räkna därefter de återstående dagarna.
Steg 3 blir knepigt mot slutet av en månad, eftersom månaderna inte har lika många dagar. En person som föddes den 31 januari och vars ålder mäts den 1 mars är 1 månad och 1 dag gammal. En månad efter 31 januari är 28 februari (eller 29 februari under ett skottår), eftersom det inte finns någon 31 februari. 1 mars är en dag därefter. Denna metod, som ibland kallas relativedelta-regeln efter Python-biblioteket som gjorde den populär, begränsar årsdagens datum till den kortare månadens sista dag så att antalet dagar aldrig blir negativt.
Total förfluten tid (dagar, timmar, sekunder)
För en exakt beräkning av den levda tiden omvandlas båda datumen till en enda tidpunkt, och skillnaden beräknas i hela dagar:
där d är antalet hela dagar, t måldatumet och b födelsedatumet, där vart och ett anges som ett antal millisekunder, och divisorn är antalet millisekunder på ett dygn.
Båda datumen ställs in på midnatt UTC (koordinerad universell tid) före subtraktionen. Det hindrar ändringar till och från sommartid från att lägga till eller ta bort en timme och påverka dagräkningen. Från det totala antalet dagar beräknas veckor genom att dividera dagarna med 7 och avrunda nedåt. Timmar, minuter och sekunder fås genom att multiplicera dagantalet med 24, 1 440 respektive 86 400.
Om det totala antalet dagar divideras med 365 eller 365,25 fås en ungefärlig ålder i år, men metoden tar inte hänsyn till vilka år i perioden som var skottår. Kalenderberäkningen ovan är exakt. Använd kalenderålder för att svara på frågan ”hur gammal är jag?”. Använd totalt antal dagar eller veckor för uppgifter som kräver exakt förfluten tid, till exempel för att tidsplanera läkemedelsdoser eller räkna ned till en milstolpe.
Räkneexempel
En person som föddes den 1 januari 2000, och vars ålder mäts den 1 januari 2020:
| Mått | Värde |
|---|---|
| Kalenderålder | 20 år, 0 månader, 0 dagar |
| Totalt antal månader | 240 |
| Totalt antal veckor | 1 043 |
| Totalt antal dagar | 7 305 |
| Totalt antal timmar | 175 320 |
| Totalt antal minuter | 10 519 200 |
| Totalt antal sekunder | 631 152 000 |
| Veckodag vid födelsen | Lördag |
Summan 7 305 dagar är lika med 20 × 365 plus 5 skottdagar, för skottåren 2000, 2004, 2008, 2012 och 2016. Vart och ett av dessa år lade till en 29 februari som infaller inom perioden på 20 år. Därför är dagantalet högre än en enkel beräkning med 20 × 365, och därför är det lätt att räkna fel med några dagar när man gör beräkningen för hand.
Formel för åldersberäkning i kod
Kalenderåldersmetoden ovan kan implementeras i de flesta programmeringsspråk. Det är säkrare att använda ett inbyggt datum- och tidsbibliotek än att skriva reglerna för skottår och månaders längd för hand.
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 varnar för att argumentet "md" kan returnera ett negativt tal eller ett felaktigt
dagantal nära månadsgränser, så den del av formeln som gäller återstående dagar stämmer
inte alltid överens med regeln om begränsning ovan.
Vanliga frågor
Hur tar jag reda på min exakta ålder? Ange ett födelsedatum och låt måldatumet stå kvar på dagens datum. Resultatet visar åldern i år, månader och dagar samt samma ålder i totalt antal dagar, veckor, timmar och sekunder.
Varför ger två åldersräknare olika svar? Skillnaden beror vanligtvis på hur de återstående dagarna nära en månadsgräns räknas. En räknare som begränsar till den kortare månaden vid månadsslut, enligt beskrivningen ovan, kan skilja sig med en eller två dagar från en som helt enkelt dividerar den förflutna tiden med 30.
Tar beräkningen hänsyn till skottår? Ja. Det totala dagantalet inkluderar varje 29 februari som infaller mellan de två datumen. Under ett år utan en 29 februari räknas årsdagen för någon som fötts på skottdagen som 28 februari, den månadens sista dag. En person som föddes den 29 februari 1996 är 26 år, 11 månader och 22 dagar gammal den 20 februari 2023, och nästa födelsedag infaller 8 dagar senare, den 28 februari 2023.
Kan ålder beräknas för ett datum i det förflutna eller framtiden? Ja. Om måldatumet ställs in på ett framtida datum visas hur gammal personen kommer att vara den dagen. Om det ställs in på ett tidigare datum visas hur gammal personen var. Födelsedatumet kan inte ligga i framtiden, och måldatumet kan inte infalla före födelsedatumet.
Påverkar tidszoner resultatet? Nej. Båda datumen omvandlas till midnatt UTC innan dagantalet beräknas, så totalsumman förblir densamma oavsett användarens plats eller ändringar till och från sommartid.
Varför skiljer sig dagantalet från att dividera dagarna med 365,25? 365,25 är endast en genomsnittlig årslängd; metoden håller inte reda på vilka specifika år i perioden som var 366 dagar långa skottår. Att räkna hela dagar mellan två verkliga kalenderdatum är exakt.
Källor
- Python
dateutil—relativedelta, regeln för månader och dagar vid kalenderålder som beskrivs ovan. - Java-plattformen —
Period.betweenochChronoUnit.DAYS. - Microsoft Excel — funktionen
DATEDIF. - MDN Web Docs —
Date. - Dershowitz, N. och Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.