Kalkulator starosti — Natančna starost v letih, mesecih in dneh
Brezplačni kalkulator starosti: vnesite datum rojstva in dobite natančno starost v letih, mesecih in dneh, ter skupne tedne, dneve, ure in vaš naslednji rojstni dan.
Kalkulator starosti
Rodili ste se na Monday
Naslednji rojstni dan: 144 dni od zdaj (sledi 37)
Vaša starost v drugih enotah
Napredek v življenju
Vaša starost glede na ilustrativno referenčno obdobje 80 let.
Dokumentacija
Kaj počne ta kalkulator
Vnesite datum rojstva in prikaže vam natanko, koliko ste stari — v letih, mesecih in dneh — enako kot bi to rekli naokoli ("Imam 33 let, 4 mesece in 5 dni"). Prikazuje tudi enako starost šteto čisto v mesecih, tednih, dneh, urah, minutah in sekundah, dan v tednu, ko ste se rodili, in koliko časa do vašega naslednjega rojstnega dneva.
Drugo polje pustite na danes za vašo trenutno starost ali ga spremenite na kateri koli pretekli ali prihodnji datum, da ugotovite vašo starost na ta datum.
Eno pravilo, ki oteža starosti: meseci in leta niso določeno število dni. Februar ima 28 ali 29; ostali meseci imajo 30 ali 31. Tako "1 mesec" pomeni "isti dan v mesecu, mesec pozneje" — ne "30 dni." Ta kalkulator sledi pravilu za koledar, zato se lahko razlikuje za dan ali dva od orodij, ki samo delijo s 30 ali 365.
Kako se izračuna vaša starost
Starost je razlika med dvema datumoma. Obstajata dva pravilna načina za merjenje te razlike, in to orodje prikazuje oba.
1. Koledarska starost (leta, meseci, dnevi). Štejte celotna leta od rojstnega dne, nato cele mesece, nato preostale dneve:
- Štejte polna leta od rojstva.
- Od zadnjega rojstnega dneva štejte polne mesece.
- Od tam naprej štejte preostale dneve.
Subtilni del je korak 3 pri mejah mesecev. Oseba, rojena 31. januarja, merjena 1. marca, je stara 1 mesec in 1 dan — ker "en mesec po 31. januarjem" pade na 28./29. februar (31. februar ne obstaja), 1. marec pa je en dan za tem. Ta kalkulator vpne na konec krajšega meseca, kar se ujema s pogosto uporabljenim pravilom dateutil.relativedelta, zato rojstni dnevi na koncu meseca nikoli ne proizvajajo negativnega števila dni.
2. Skupni pretekli čas (dnevi, ure, sekunde). Za številke "vaša starost v drugih enotah" sta oba datuma pretvorjena v štetje polnih dni in pomnožena:
Oba datuma sta prvo pripeta na UTC polnoč, zato spremembe poletnega časa ne morejo dodati ali odvzeti ure in motiti štetja dni. Tedni so dnevi ÷ 7 (zaokroženo navzdol); ure, minute in sekunde so štetje dni podvojeno.
Zakaj ne bi samo delili dni s 365? Ker bi se zdrsnilo. Delitev 7.305 dni s 365 daje 20,01 let; delitev z 365,25 daje 20,00 — toda nobena ne ve, katera leta so bila prestopna ali katere mesece ste dejansko preživeli. Koledarsko štetje je natančno; delitev dni je približek. Uporabite koledarsko starost za "koliko imam let," in skupne dni/tedne za natančno delo z minulim časom (časovna točka zdravil, trajanje projekta, odbrojavanje mejnikov).
Obdelan primer
Rojen 1. januar 2000, merjen 1. januar 2020:
| Mera | Vrednost |
|---|---|
| Koledarska starost | 20 let, 0 mesecev, 0 dni |
| Skupni dnevi | 7.305 |
| Skupni tedni | 1.043 |
| Dan rojstva | Sobota |
7.305 dni = 20 × 365 + 5 prestopnih dni (2000, 2004, 2008, 2012, 2016). To eno dejstvo — pet dodatnih dni, ki jih večina ljudi pozabi — je natanko tisto, zakaj je kalkulator boljši od matematike v glavi.
Starost v kodi
Isti izračun v vsakem jeziku. Za koledarsko starost uporabite vgrajeno knjižnico za datume, namesto da bi sami pisali aritmetiko — ta že pozna prestopna leta in dolžine mesecev.
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
5Pogosta vprašanja
Koliko imam točno let? Vnesite datum rojstva in pustite cilj na danes. Kalkulator prikazuje vašo starost v letih, mesecih in dneh, in jo ponovi v skupnih dneh, tednih, urah in sekundah.
Zakaj se moja starost razlikuje od drugega kalkulatorja? Skoraj vedno preostali del meseca/dneva. Orodja se ne strinjajo o tem, kako šteti dneve po zadnjem polnem mesecu na mejah mesecev. To orodje vpne na krajši mesec (konvencija relativedelta); orodje, ki deli z 30, se bo razlikovalo za dan ali dva.
Ali obravnava prestopna leta in rojstne dneve 29. februarja? Da. Štetje dni vključuje vsak prestopni dan v dosegu, rojstni dan 29. februarja pa je merjen glede na 28. feb / 1. mar v nepresstopnih letih brez prekoračitve.
Ali lahko izračunam starost na pretekli ali prihodnji datum? Da — nastavite polje "Starost na datum" na kateri koli datum. Prihodnji datum vam pove, koliko boste stari takrat; pretekli datum, koliko ste bili.
Kaj pa časovni pasovi? Datumi so normizirani na UTC pred štetjem, zato je skupni dan stabilen ne glede na to, kje ste ali ali se je spremenil poletni čas.
Viri
- Python
dateutil—relativedelta(pravilo za mestec/dan s koledarsko starostjo, ki ga sledi to orodje). - Java Platform —
Period.betweeninChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunction. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.