Ikälaskin — Tarkka ikä vuosissa, kuukausissa ja päivissä
Ilmainen ikälaskin: syötä syntymäpäiväsi saadaksesi tarkka ikäsi vuosissa, kuukausissa ja päivissä, plus kokonaisviikot, päivät, tunnit ja seuraava syntymäpäivä.
Ikälaskin
Synnyit Monday
Seuraava syntymäpäivä: 144 päivän päästä (tulee olemaan 37)
Ikäsi muissa yksiköissä
Elämän edistyminen
Ikäsi suhteessa havainnollistavaan 80 vuoden referenssijaksoon.
Dokumentaatio
Mitä tämä laskin tekee
Syötä syntymäpäiväsi ja se kertoo tarkalleen, kuinka vanha olet — vuosissa, kuukausissa ja päivissä — samalla tavalla kuin sanoisit sen ääneen ("Olen 33 vuotta, 4 kuukautta ja 5 päivää vanha"). Se näyttää myös saman iän puhtaasti kuukausissa, viikoissa, päivissä, tunneissa, minuuteissa ja sekunteissa, viikonpäivän, jolloin synnyit, ja kuinka kauan seuraavaan syntymäpäivään.
Jätä toinen kenttä tämän päivän päiväykselle nykyisen ikäsi laskemiseksi tai muuta se mihin tahansa menneisyyden tai tulevaisuuden päiväykseen löytääksesi ikäsi kyseisellä päiväyksellä.
Yksi sääntö, joka tekee iän laskemisesta hankalan: kuukaudet ja vuodet eivät ole kiinteä määrä päiviä. Helmikuussa on 28 tai 29 päivää, muissa kuukausissa on 30 tai 31. Joten "1 kuukausi" tarkoittaa "sama päivän numero, yksi kuukausi myöhemmin" — ei "30 päivää". Tämä laskin noudattaa tätä kalenterisääntöä, minkä vuoksi se voi erota yhdellä tai kahdella päivällä laskimista, jotka vain jakavat 30:llä tai 365:llä.
Kuinka ikäsi lasketaan
Ikä on kahden päiväyksen välinen ero. On kaksi rehellista tapaa mitata tämä ero, ja tämä työkalu näyttää molemmat.
1. Kalenterivuosi-ikä (vuosia, kuukausia, päiviä). Laske koko vuodet syntymäpäivästä, sitten koko kuukaudet, sitten jäljelle jääneet päivät:
- Laske täydet vuodet syntymästä.
- Viimeisestä syntymäpäivästä laske täydet kuukaudet.
- Siitä laske jäljelle jääneet päivät.
Hankala osa on vaihe 3 kuukauden rajoilla. Joku, joka syntyi 31. tammikuuta, mitattu 1. maaliskuuta, on 1 kuukausi ja 1 päivä vanha — koska "yksi kuukausi 31. tammikuun jälkeen" päätyy 28./29. helmikuuhun (helmikuulla ei ole 31. päivää), ja 1. maaliskuu on yksi päivä sen jälkeen. Tämä laskin kiinnittää kuukauden loppuun lyhyemmässä kuukaudessa, mikä vastaa laajalti käytettyä dateutil.relativedelta -sääntöä, joten kuukauden lopun syntymäpäivät eivät koskaan tuota negatiivista päivälaskua.
2. Kokonaiskulunut aika (päivät, tunnit, sekunnit). "Ikäsi muissa yksiköissä" -lukujen osalta kaksi päiväystä muutetaan kokonaispäivien laskuksi ja kerrotaan:
Molemmat päiväykset kiinnitetään UTC-keskiyöhön ensin, joten kesäaikaan siirtymisen muutokset eivät voi lisätä tai poistaa tuntia ja sekoittaa päivälaskua. Viikot ovat päivät ÷ 7 (pyöristetty alas); tunnit, minuutit ja sekunnit ovat päivälaskun skaalattuja ylöspäin.
Miksi ei vain jaa päiviä 365:llä? Koska ajautuisit. Jakamalla 7305 päivää 365:llä saat 20,01 vuotta; jakamalla 365,25:llä saat 20,00 — mutta kumpikaan ei tiedä, mitkä vuodet olivat karkauspäiviä tai mitä kuukausia olit tosiasiassa elänyt. Kalenterilaskeminen on tarkkaa; päivien jakaminen on likiarvo. Käytä kalenterivuosi-ikää kysymykseen "kuinka vanha olen", ja kokonaispäiviä/viikkoja tarkkaan kuluneen ajan työhön (lääkityksen ajoitus, hankkeen kestot, virstanpylväiden laskemiset).
Käytetty esimerkki
Syntynyt 1. tammikuuta 2000, mitattu 1. tammikuuta 2020:
| Mittari | Arvo |
|---|---|
| Kalenterivuosi-ikä | 20 vuotta, 0 kuukautta, 0 päivää |
| Kokonaispäivät | 7 305 |
| Koko viikot | 1 043 |
| Syntymän viikonpäivä | Lauantai |
7 305 päivää = 20 × 365 + 5 karkauspäivää (2000, 2004, 2008, 2012, 2016). Tämä yksittäinen yksityiskohta — viisi ylimääräistä päivää, jotka useimmat ihmiset unohtavat — on tasan siksi, miksi laskin voittaa päätelaskelmisen.
Ikä koodissa
Sama laskeminen kussakin kielessä. Kalenterivuosi-iän osalta suosi sisäänrakennettua päiväkirjastoaan käsin kirjoitetun aritmetiikan yli — se jo tietää karkauspäivät ja kuukauden pituudet.
1' 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"
61from 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 calendarAge(birth, target) {
2 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
3 + (target.getUTCMonth() - birth.getUTCMonth());
4 const anchor = new Date(Date.UTC(birth.getUTCFullYear(), birth.getUTCMonth() + months, birth.getUTCDate()));
5 if (anchor > target) months--;
6 return { years: Math.floor(months / 12), months: months % 12 };
7}
8
9const birth = new Date(Date.UTC(2000, 0, 1));
10const target = new Date(Date.UTC(2020, 0, 1));
11const totalDays = Math.floor((target - birth) / 86400000); // 7305
121import java.time.LocalDate;
2import java.time.Period;
3import java.time.temporal.ChronoUnit;
4
5LocalDate birth = LocalDate.of(2000, 1, 1);
6LocalDate target = LocalDate.of(2020, 1, 1);
7
8Period age = Period.between(birth, target); // 20y 0m 0d
9long totalDays = ChronoUnit.DAYS.between(birth, target); // 7305
101using System;
2
3var birth = new DateTime(2000, 1, 1);
4var target = new DateTime(2020, 1, 1);
5
6int years = target.Year - birth.Year;
7if (birth.AddYears(years) > target) years--; // not birthday yet
8long totalDays = (target - birth).Days; // 7305
91#include <chrono>
2using namespace std::chrono;
3
4// C++20 calendar types
5sys_days birth = year{2000}/1/1;
6sys_days target = year{2020}/1/1;
7
8auto total_days = (target - birth).count(); // 7305
9years_months_days ymd_diff{birth, target}; // year_month_day arithmetic
101package main
2
3import "time"
4
5func main() {
6 birth := time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC)
7 target := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
8 totalDays := int(target.Sub(birth).Hours() / 24) // 7305
9 _ = totalDays
10}
111use chrono::{NaiveDate, Datelike};
2
3let birth = NaiveDate::from_ymd_opt(2000, 1, 1).unwrap();
4let target = NaiveDate::from_ymd_opt(2020, 1, 1).unwrap();
5
6let total_days = (target - birth).num_days(); // 7305
7let years = target.year() - birth.year(); // adjust if birthday not reached
81<?php
2$birth = new DateTime('2000-01-01');
3$target = new DateTime('2020-01-01');
4$diff = $birth->diff($target);
5
6echo "{$diff->y}y {$diff->m}m {$diff->d}d\n"; // 20y 0m 0d
7echo $diff->days; // 7305
81require 'date'
2
3birth = Date.new(2000, 1, 1)
4target = Date.new(2020, 1, 1)
5
6total_days = (target - birth).to_i # 7305
7years = target.year - birth.year
8years -= 1 if birth.next_year(years) > target
91birth <- as.Date("2000-01-01")
2target <- as.Date("2020-01-01")
3
4total_days <- as.integer(target - birth) # 7305
5Yleiset kysymykset
Kuinka vanha olen tarkalleen? Kirjoita syntymäpäiväsi ja jätä kohde tämän päivään. Laskin näyttää ikäsi vuosissa, kuukausissa ja päivissä, ja toistaa sen kokonaispäivissä, viikoissa, tunneissa ja sekunteissa.
Miksi ikäni eroaa toisesta laskimesta? Lähes aina kuukauden/päivän ylijäämä. Laskimet ovat eri mieltä kuinka laskea päivät viimeisen koko kuukauden jälkeen kuukauden rajoilla. Tämä kiinnittää lyhyempään kuukauteen (relativedelta-sopimus); laskin, joka jakaa 30:llä, eroaa yhdellä tai kahdella päivällä.
Käsitteekö se karkauspäiviä ja 29. helmikuuta syntymäpäiviä? Kyllä. Päivälaskelmat sisältävät jokaisen karkauspäivän alueella, ja 29. helmikuuta syntymäpäivä mitataan vastaan 28. helmikuuta / 1. maaliskuuta ei-karkauspäivinä ilman ylivuotoa.
Voinko laskea iän menneisyydelle tai tulevaisuudelle? Kyllä — aseta "Ikä päiväyksellä" -kenttä mihin tahansa päiväykseen. Tulevaisuuden päiväys kertoo, kuinka vanha olet silloin; menneisyyden päiväys, kuinka vanha olit.
Entä aikavyöhykkeet? Päiväykset normalisoidaan UTC-merkinnäksi ennen laskemista, joten kokonaispäivän arvo on vakaa riippumatta siitä, missä olet tai muuttuiko kesäaika.
Lähteet
- Python
dateutil—relativedelta(kalenterivuosi-iän kuukauden/päivän sääntö, jota tämä työkalu noudattaa). - Java Platform —
Period.betweenjaChronoUnit.DAYS. - Microsoft Excel —
DATEDIF-funktio. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.