Kalkulačka veku — Presný vek v rokoch, mesiacoch a dňoch
Bezplatná kalkulačka veku: zadajte svoj dátum narodenia, aby ste zistili svoj presný vek v rokoch, mesiacoch a dňoch, plus celkové týždne, dni, hodiny a vaše nasledujúce narodeniny.
Kalkulačka veku
Narodili ste sa v Monday
Nasledujúce narodeniny: 144 dní (dovŕšenie 37)
Váš vek v iných jednotkách
Pokrok v živote
Váš vek v porovnaní s ilustračným rozsahom 80 rokov.
Dokumentácia
Čo robí táto kalkulačka
Zadajte svoj dátum narodenia a kalkulačka vám povie presný vek — v rokoch, mesiacoch a dňoch — presne tak, ako by ste to povedali nahlas ("mám 33 rokov, 4 mesiace a 5 dní"). Tiež ukazuje ten istý vek počítaný čisto v mesiacoch, týždňoch, dňoch, hodinách, minútach a sekundách, deň v týždni, v ktorý ste sa narodili, a ako dlho zostáva do vašich nasledujúcich narodenín.
Ponechajte druhé pole na dnešný dátum pre váš aktuálny vek, alebo ho zmeňte na ľubovoľný minulý alebo budúci dátum, aby ste zistili váš vek v ten deň.
Pravidlo, ktoré robí vek zložitým: mesiace a roky nemajú pevný počet dní. Február má 28 alebo 29; ostatné mesiace majú 30 alebo 31. Takže "1 mesiac" znamená "ten istý deň v čísle, mesiac neskôr" — nie "30 dní." Táto kalkulačka dodržiava kalendárne pravidlo, preto sa môže líšiť o deň alebo dva od nástrojov, ktoré jednoducho delia číslom 30 alebo 365.
Ako sa vek počíta
Vek je rozdiely medzi dvoma dátumami. Existujú dva poctivé spôsoby, ako merať tento rozdiely, a tento nástroj ukazuje oba.
1. Kalendárny vek (roky, mesiace, dni). Počítajte celé roky od vášho narodenia, potom celé mesiace, potom zvyšné dni:
- Počítajte plné roky od narodenia.
- Od posledného dátumu narodenia počítajte plné mesiace.
- Odtiaľto počítajte zvyšné dni.
Jemná čásť je krok 3 blízko hraníc mesiacov. Niekto narodený 31. januára, meraný 1. marca, je 1 mesiac a 1 deň starý — pretože "mesiac po 31. januári" skončí na 28./29. februári (neexistuje 31. február) a 1. marec je o deň ďalej. Táto kalkulačka upnutie na koniec kratšieho mesiaca, čo zodpovedá široko používanej pravidlu dateutil.relativedelta, aby sa dny na konci mesiaca nikdy neproducirali negatívne počty.
2. Celkový uplynulý čas (dni, hodiny, sekundy). Pre čísla "váš vek v iných jednotkách" sa dva dátumy konvertujú na počet plných dní a vynásobia:
Oba dátumy sú najskôr pripnuté na polnoc UTC, takže zmeny letného času nemôžu pridať alebo odstrániť hodinu a narušiť počet dní. Týždne sú dni ÷ 7 (zaokrúhlené nadol); hodiny, minúty a sekundy sú počet dní preskálovaný.
Prečo nedeliť dni 365? Pretože by ste sa posunuli. Delením 7 305 dní 365 dostanete 20,01 rokov; delením 365,25 dostanete 20,00 — ale ani jeden nevie ktoré roky boli priestupné alebo ktoré mesiace ste skutočne prežili. Kalendárne počítanie je presné; delenie dní je aproximácia. Použite kalendárny vek pre "aký starý som" a celkové dni/týždne na presnú prácu s uplynulým časom (načasovanie liekov, trvanie projektov, odpočty míľnikov).
Vypracovaný príklad
Narodený 1. januára 2000, meraný 1. januára 2020:
| Meranie | Hodnota |
|---|---|
| Kalendárny vek | 20 rokov, 0 mesiacov, 0 dní |
| Celkové dni | 7 305 |
| Celkové týždne | 1 043 |
| Deň narodenia | Sobota |
7 305 dní = 20 × 365 + 5 priestupných dní (2000, 2004, 2008, 2012, 2016). Tento jediný detail — päť dodatočných dní, ktoré väčšina ľudí zabudne — je presne dôvod, prečo je kalkulačka lepšia ako počítanie v hlave.
Vek v kóde
Rovnaký výpočet v každom jazyku. Pre kalendárny vek uprednostňujte vstavanú knižnicu dátumov pred ručným aritmetickým — už pozná priestupné roky a dĺžky mesiacov.
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
5Časté otázky
Koľko rokov mám presne? Zadajte svoj dátum narodenia a ponechajte cieľ na dnes. Kalkulačka ukazuje váš vek v rokoch, mesiacoch a dňoch a opakuje ho v celkových dňoch, týždňoch, hodinách a sekundách.
Prečo sa môj vek líši od inej kalkulačky? Takmer vždy zvyšok mesiaca/dňa. Nástroje sa nezhodujú na tom, ako počítať dni po poslednom plnom mesiaci na hraniciach mesiacov. Táto umožňuje upnutie na kratší mesiac (konvencia relativedelta); nástroj, ktorý delí 30, sa bude líšiť o deň alebo dva.
Zvláda priestupné roky a narodeniny 29. februára? Áno. Počty dní zahŕňajú každý priestupný deň v rozsahu a narodeniny 29. februára sa merajú oproti 28. februáru / 1. marcu v neprieťažných rokoch bez pretečenia.
Môžem vypočítať vek na minulý alebo budúci dátum? Áno — nastavte pole "Vek v dátume" na ľubovoľný dátum. Budúci dátum vám povie, ako starý budete; minulý dátum, ako starý ste boli.
Čo s časovými pásmami? Dátumy sa normalizujú na UTC pred počítaním, takže celkový počet dní je stabilný bez ohľadu na to, kde ste alebo či sa zmení letný čas.
Zdroje
- Python
dateutil—relativedelta(pravidlo kalendárneho veku mesiacov/dní, ktoré táto kalkulačka dodržiava). - Java Platform —
Period.betweenaChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunkcia. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.