Калькулятор віку — точний вік у роках, місяцях та днях
Безплатний калькулятор віку: введіть вашу дату народження, щоб дізнатися точний вік у роках, місяцях та днях, а також загальну кількість тижнів, днів, годин та дату наступного дня народження.
Калькулятор віку
Ви народилися у Monday
Наступний день народження: 144 днів тому (виповнюється 37)
Ваш вік в інших одиницях
Прогрес життя
Ваш вік порівняно з іншим 80-річним еталонним периодом.
Документація
Що робить цей калькулятор
Введіть вашу дату народження, і він розповість вам, скільки вам років — у роках, місяцях та днях — так, як ви б це сказали ("Мені 33 роки, 4 місяці та 5 днів"). Він також показує той же вік, розраховий суто в місяцях, тижнях, днях, годинах, хвилинах та секундах, день тижня, коли ви народилися, та як довго до наступного дня народження.
Залиште друге поле на сьогоднішню дату, щоб дізнатися ваш поточний вік, або змініть його на будь-яку минулу або майбутню дату, щоб знайти ваш вік на цю дату.
Одне правило, яке ускладнює вік: місяці та роки — це не фіксована кількість днів. У лютому 28 або 29 днів; інші місяці мають 30 або 31. Тому "1 місяць" означає "той же день числа, один місяць пізніше" — не "30 днів". Цей калькулятор дотримується цього календарного правила, тому він може відрізнятися на день-два від інструментів, які просто ділять на 30 або 365.
Як розраховується ваш вік
Вік — це проміжок між двома датами. Є два чесних способи виміру цього проміжку, і цей інструмент показує обидва.
1. Календарний вік (роки, місяці, дні). Порахуйте повні роки від дня народження, потім повні місяці, потім решту днів:
- Порахуйте повні роки з моменту народження.
- Від останнього дня народження порахуйте повні місяці.
- Звідси порахуйте решту днів.
Тонкість знаходиться на кроці 3 біля меж місяців. Людина, народжена 31 січня, виміряна 1 березня, має вік 1 місяць та 1 день — тому що "один місяць після 31 січня" припадає на 28/29 лютого (не існує 31 лютого), а 1 березня — це один день після цього. Цей калькулятор прив'язується до кінця коротшого місяця, збігаючись з широко використовуваним dateutil.relativedelta правилом, тому дні народження в кінці місяця ніколи не дають від'ємну кількість днів.
2. Загальний витрачений час (дні, години, секунди). Для цифр "ваш вік в інших одиницях" дві дати конвертуються на кількість повних днів та множаться:
Обидві дати фіксуються на UTC полуночі спочатку, тому зміни літнього часу не можуть додати або відняти годину і порушити кількість днів. Тижні — це дні ÷ 7 (округлено вниз); години, хвилини та секунди — це кількість днів, помножена.
Чому не просто поділити дні на 365? Тому що ти дрейфуватимеш. Ділення 7,305 днів на 365 дає 20.01 років; ділення на 365.25 дає 20.00 — але жоден з них не знає яких саме років були високосними або яких місяців ви насправді пережили. Календарний підрахунок точний; ділення днів — це наближення. Використовуйте календарний вік для "скільки мені років", а загальну кількість днів/тижнів для точної роботи з витраченим часом (синхронізація ліків, тривалість проекту, зворотний відлік до віх).
Опрацьований приклад
Народжений 1 січня 2000, виміряний 1 січня 2020:
| Міра | Значення |
|---|---|
| Календарний вік | 20 років, 0 місяців, 0 днів |
| Всього днів | 7,305 |
| Всього тижнів | 1,043 |
| День тижня народження | Субота |
7,305 днів = 20 × 365 + 5 високосних днів (2000, 2004, 2008, 2012, 2016). Ця єдина деталь — п'ять додаткових днів, які більшість людей забувають — це саме тому, чому калькулятор краще за математику в умі.
Вік у коді
Той же розрахунок у кожній мові. Для календарного віку віддайте перевагу вбудованій бібліотеці дат замість ручної арифметики — вона вже знає високосні роки та довжину місяців.
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Поширені запитання
Скільки мені років в точності? Введіть вашу дату народження та залиште цільову дату на сьогодні. Калькулятор показує ваш вік у роках, місяцях та днях та повторює його в загальній кількості днів, тижнів, годин та секунд.
Чому мій вік відрізняється від іншого калькулятора? Майже завжди залишок місяця/дня. Інструменти розходяться в тому, як порахувати дні після останнього повного місяця біля меж місяців. Цей прив'язується до коротшого місяця (конвенція relativedelta); інструмент, який ділить на 30, буде відрізнятися на день-два.
Чи він обробляє високосні роки та дні народження 29 лютого? Так. Підрахунок днів включає кожен високосний день в діапазоні, а день народження 29 лютого вимірюється проти 28 лютого / 1 березня в невисокосні роки без переповнення.
Чи можу я розрахувати вік на минулу або майбутню дату? Так — встановіть поле "Вік на дату" на будь-яку дату. Майбутня дата розповідає вам, скільки вам буде років тоді; минула дата — скільки вам було.
Що щодо часових поясів? Дати нормалізуються до UTC перед підрахунком, тому загальний день залишається стабільним незалежно від того, де ви знаходитеся або чи змінився літній час.
Джерела
- Python
dateutil—relativedelta(правило календарного віку місяць/день, яке дотримується цей інструмент). - Java Platform —
Period.betweenтаChronoUnit.DAYS. - Microsoft Excel —
DATEDIFфункція. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.