Kalkulačka věku — Přesný věk v letech, měsících a dnech
Bezplatná kalkulačka věku: zadej své datum narození a získej svůj přesný věk v letech, měsících a dnech, plus celkový počet týdnů, dní, hodin a tvoje další narozeniny.
Kalkulačka věku
Narodil/a ses v Monday
Další narozeniny: Za 144 dní (dosáhneš 37)
Tvůj věk v jiných jednotkách
Postup v životě
Tvůj věk v porovnání s ilustrativním 80letým referenčním obdobím.
Dokumentace
Co tato kalkulačka dělá
Zadej své datum narození a ona ti řekne přesně, kolik ti let — v letech, měsících a dnech — stejně, jak bys to řekl/a nahlas ("Mám 33 let, 4 měsíce a 5 dní"). Ukazuje také stejný věk počítaný čistě v měsících, týdnech, dnech, hodinách, minutách a sekundách, den v týdnu, kdy ses narodil/a, a jak dlouho do tvých příštích narozenin.
Nech druhé pole na dnešní den pro svůj současný věk, nebo jej změň na jakékoliv minulé či budoucí datum, aby se našel tvůj věk k tomu datu.
Pravidlo, které činí věk složitým: Měsíce a roky nejsou pevným počtem dní. Únor má 28 nebo 29 dní; ostatní měsíce mají 30 nebo 31. Takže "1 měsíc" znamená "stejný den v následujícím měsíci" — ne "30 dní." Tato kalkulačka se řídí tímto kalendářním pravidlem, což je důvod, proč se může od nástrojů, které pouze dělí 30 nebo 365, lišit o den či dva.
Jak se počítá tvůj věk
Věk je mezera mezi dvěma daty. Existují dva způsoby, jak tuto mezeru změřit, a tento nástroj ukazuje oba.
1. Kalendářní věk (roky, měsíce, dny). Počítej celé roky od narozenin, pak celé měsíce a pak zbývající dny:
- Počítej plné roky od narození.
- Od poslední návštěvy narozenin počítej plné měsíce.
- Odtud počítej zbývající dny.
Jemná část je krok 3 blízko hranicím měsíce. Někdo narozený 31. ledna, měřený 1. března, je 1 měsíc a 1 den starý — protože "jeden měsíc po 31. lednu" vede na 28./29. únor (neexistuje 31. únor) a 1. březen je jeden den za tím. Tato kalkulačka se připíná na konec kratšího měsíce, což odpovídá široce používanému pravidlu dateutil.relativedelta, takže narozeniny na konci měsíce nikdy nevytváří záporný počet dní.
2. Celkový uplynulý čas (dny, hodiny, sekundy). Pro "tvůj věk v jiných jednotkách", jsou dvě data převedena na počet celých dní a vynásobena:
Obě data jsou nejdříve připnuta na půlnoc UTC, takže změny v letním čase nemohou přidat nebo odebrat hodinu a zkazit počet dní. Týdny jsou dny ÷ 7 (zaokrouhleno dolů); hodiny, minuty a sekundy jsou počet dní navýšený.
Proč prostě nedelit dny 365? Protože by ses posunul/a. Dělení 7 305 dní 365 dává 20,01 let; dělení 365,25 dává 20,00 — ale ani jeden ví, které roky byly přestupné nebo které měsíce jsi opravdu prožil/a. Kalendářní počítání je přesné; dělení dny je aproximace. Použij kalendářní věk pro "kolik mi je", a celkové dny/týdny pro přesnou práci s uplynulým časem (časování léků, trvání projektů, odpočty milníků).
Zpracovaný příklad
Narozen/a 1. ledna 2000, měřeno 1. ledna 2020:
| Měření | Hodnota |
|---|---|
| Kalendářní věk | 20 let, 0 měsíců, 0 dní |
| Celkové dny | 7 305 |
| Celkové týdny | 1 043 |
| Den v týdnu narození | Sobota |
7 305 dní = 20 × 365 + 5 přestupných dní (2000, 2004, 2008, 2012, 2016). Právě tato jediná věc — pět extra dní, která si většina lidí nevšimne — je přesně důvodem, proč je kalkulačka lepší než počítání v hlavě.
Věk v kódu
Stejný výpočet v každém jazyce. Pro kalendářní věk dej přednost vestavěné knihovně pro data před vlastním aritmetickým kódem — již ví o přestupných letech a délkách měsíců.
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
5Běžné otázky
Kolik mi přesně let? Zadej své datum narození a nech cílové datum na dnešek. Kalkulačka zobrazí tvůj věk v letech, měsících a dnech, a zopakuje jej v celkových dnech, týdnech, hodinách a sekundách.
Proč se můj věk liší od jiné kalkulačky? Téměř vždy zbytek měsíce/dne. Nástroje se liší v tom, jak počítají dny po posledním celém měsíci na hranicích měsíce. Tento se připíná na kratší měsíc (konvence relativedelta); nástroj, který dělí 30, se bude lišit o den či dva.
Zvládá přestupné roky a narozeniny na 29. února? Ano. Počty dní zahrnují každý přestupný den v rozsahu, a narozeniny 29. února se měří proti 28. únoru / 1. březnu v nepřestupných letech bez přetečení.
Mohu vypočítat věk na minulé nebo budoucí datum? Ano — nastav pole "Věk k datu" na jakékoliv datum. Budoucí datum ti řekne, kolik ti bude let; minulé datum, kolik ti bylo.
Co na to časové zóny? Data jsou normalizována na UTC před počítáním, takže celkový počet dní je stabilní bez ohledu na to, kde se nacházíš nebo zda se změnilo letní čas.
Zdroje
- Python
dateutil—relativedelta(pravidlo měsíce/dne kalendářního věku, které se řídí tento nástroj). - Java Platform —
Period.betweenaChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunkce. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.