Amžiaus skaičiuotuvas — Tikslus amžius metais, mėnesiais ir dienomis
Nemokamas amžiaus skaičiuotuvas: įveskite savo gimimo datą, kad gautumėte tikslų amžių metais, mėnesiais ir dienomis, plius bendrą savaičių, dienų, valandų skaičių ir jūsų kitą gimtadienį.
Amžiaus skaičiuotuvas
Jūs gimėte Monday
Kitas gimtadienis: liko 144 dienų (sueis 37)
Jūsų amžius kitais vienetais
Gyvenimo progresą
Jūsų amžius pagal orientacinį 80 metų nuorodos diapazoną.
Dokumentacija
Ką daro šis skaičiuotuvas
Įveskite savo gimimo datą ir jis tiksliai pasakys jums, kiek jums yra metų, mėnesių ir dienų – taip, kaip jūs tai sakytumėte garsiai („Man yra 33 metai, 4 mėnesiai ir 5 dienos"). Jis taip pat rodo tą patį amžių, suskaičiuotą tik mėnesiais, savaitėmis, dienomis, valandomis, minutėmis ir sekundėmis, savaitės dieną, kurioje jūs gimėte, ir kiek laiko iki jūsų gimtadienio.
Palikite antrąjį lauką šiandieninės datos, kad sužinotumėte savo esamą amžių, arba pakeiskite jį į bet kurią praeityje arba ateityje esančią datą, kad sužinotumėte savo amžių tą datą.
Viena taisyklė, dėl kurios amžius yra sudėtingas: mėnesiai ir metai – tai ne fiksuotas dienų skaičius. Vasaris turi 28 arba 29 dienas; kiti mėnesiai turi 30 arba 31 dieną. Taigi „1 mėnuo" reiškia „ta pati dienos numeri, vienu mėnesiu vėliau" – ne „30 dienų". Šis skaičiuotuvas laikosi šios kalendorinės taisyklės, todėl jis gali skirtis viena ar dviem dienomis nuo įrankių, kurie tiesiog dali iš 30 arba 365.
Kaip apskaičiuojamas jūsų amžius
Amžius – tai skirtumas tarp dviejų datų. Yra du sąžiningi šio skirtumo matavimo būdai, ir šis įrankis rodo abu.
1. Kalendorinis amžius (metai, mėnesiai, dienos). Suskaičiuokite visus metus nuo jūsų gimtadienio, tada visus mėnesius, tada likutines dienas:
- Suskaičiuokite pilnus metus nuo gimimo.
- Nuo paskutinio gimtadienio suskaičiuokite pilnus mėnesius.
- Iš ten suskaičiuokite likusias dienas.
Sudėtinga dalis yra 3 žingsnis šalia mėnesio ribų. Žmogus, gimęs sausio 31 d., matuojamas kovo 1 d., yra 1 mėnuo ir 1 diena senas – nes „vienas mėnuo po sausio 31" priešais sugrį į vasarį 28/29 (nėra vasario 31), o kovo 1 yra viena diena po to. Šis skaičiuotuvas prisitaiko prie trumpesnio mėnesio pabaigos, atitinkant plačiai naudojamą dateutil.relativedelta taisyklę, todėl mėnesio pabaigos gimtadieniai niekada nesuriša neigiamo dienų skaičiaus.
2. Bendras praėjęs laikas (dienos, valandos, sekundės). „Jūsų amžius kitais vienetais" figūrose dvi datos konvertuojamos į visą dienų skaičių ir padauginamos:
Abi datos yra fiksuojamos UTC vidurnaktis pirmiausia, todėl per šviesos taupymo laiko pokytžius negalima pridėti ar nuleisti valandos ir sutrinti dienų skaičiaus. Savaitės yra dienos ÷ 7 (suapvalintos žemyn); valandos, minutės ir sekundės yra dienų skaičius padidėjęs.
Kodėl netiesiog padalinti dienų iš 365? Nes nusidriftuotumėte. Padaliję 7 305 dienas iš 365 gausite 20,01 metų; padalydami iš 365,25 gausite 20,00 – tačiau nei vienas nežino, kurie metai buvo keliamieji metai arba kuriuos mėnesius jūs iš tikrųjų gyvote. Kalendorinis skaičiavimas yra tikslus; dienų dalijimas yra apytikris. Naudokite kalendorinį amžių dėl „kiek man metų", ir bendras dienas/savaites dėl tikslaus praėjusio laiko darbo (vaistų tvarkaraštis, projekto trukmė, baigmės atžymėjimai).
Išsamūs pavyzdys
Gimęs sausis 1, 2000, matuojamas sausis 1, 2020:
| Matas | Vertė |
|---|---|
| Kalendorinis amžius | 20 metų, 0 mėnesių, 0 dienų |
| Bendros dienos | 7 305 |
| Bendros savaitės | 1 043 |
| Savaitės diena, kurioje gimė | Šeštadienis |
7 305 dienos = 20 × 365 + 5 keliamosios dienos (2000, 2004, 2008, 2012, 2016). Šis vienas detalė – penkios papildomos dienos, kurias dauguma žmonių pamiršta – yra tiksliai tų priežastis, kodėl skaičiuotuvas nusveria protinę matematiką.
Amžius kode
Tas pats skaičiavimas kiekvienoje kalboje. Dėl kalendorinio amžiaus, pageidaukite įtaisytą datos biblioteką virš rankomis rašytos aritmetikos – ji jau žino keliamaisiais metais ir mėnesio ilgius.
1' Visos dienos tarp dviejų datų (A1 = gimimas, B1 = tikslas):
2=B1-A1
3
4' Kalendorinis amžius pilnais metais / mėnesiais / likusios dienos:
5=DATEDIF(A1, B1, "y") & " metai, " & DATEDIF(A1, B1, "ym") & " mėnesiai, " & DATEDIF(A1, B1, "md") & " dienos"
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
5Dažnai užduodami klausimai
Kiek man tiksliai metų? Įveskite savo gimimo datą ir palikite taikinį šiandieną. Skaičiuotuvas rodo jūsų amžių metais, mėnesiais ir dienomis, ir jį kartoja bendromis dienomis, savaitėmis, valandomis ir sekundėmis.
Kodėl mano amžius skiriasi nuo kito skaičiuotuvo? Beveik visada mėnesio / dienos likutis. Įrankiai nesutaria dėl to, kaip suskaičiuoti dienas po paskutinio viso mėnesio šalia mėnesio ribų. Šita prispaudžia prie trumpesnio mėnesio (relativedelta konvencija); įrankis, kuris dali iš 30, skirsis viena ar dviem dienomis.
Ar jis tvarko keliamaisiais metais ir vasario 29 gimtadienius? Taip. Dienų skaičius apima kiekvieną keliamąją dieną diapazone, o vasario 29 gimtadienis yra matuojamas pagal vasario 28 / kovo 1 nekeliamaisiais metais be perpildymo.
Ar galiu apskaičiuoti amžių praėjusioje arba ateityje esančioje datoje? Taip – nustatykite „Amžius pagal datą" lauką į bet kurią datą. Ateities data rodo, kiek jums bus tada; praėjusią datą – kiek jums buvo.
O kaip laiko juostos? Datos normalizuojamos į UTC prieš skaičiavimą, todėl bendras dienų skaičius yra stabilus, nesvarbu, kur jūs esate arba ar keitėsi per šviesos taupymą.
Šaltiniai
- Python
dateutil—relativedelta(mėnesio / dienos taisyklė, kurią šis įrankis sekasi). - Java Platform —
Period.betweenirChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunkcija. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.