Калькулятор возраста — точный возраст в годах, месяцах и днях
Бесплатный калькулятор возраста: введите дату рождения, чтобы получить точный возраст в годах, месяцах и днях, а также общее количество недель, дней, часов и дату следующего дня рождения.
Калькулятор возраста
Вы родились в 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? Потому что вы будете дрейфовать. Деление 7305 дней на 365 дает 20,01 лет; деление на 365,25 дает 20,00 — но ни один из них не знает, какие годы были високосными или какие месяцы вы на самом деле прожили. Подсчёт календаря точен; деление дней — это приближение. Используйте календарный возраст для «сколько мне лет» и общие дни/недели для точной работы с прошедшим временем (расписание приёма лекарств, длительность проектов, обратный отсчёт к вехам).
Отработанный пример
Рождение 1 января 2000 г., измерение 1 января 2020 г.:
| Мера | Значение |
|---|---|
| Календарный возраст | 20 лет, 0 месяцев, 0 дней |
| Всего дней | 7305 |
| Всего недель | 1043 |
| День недели рождения | Суббота |
7305 дней = 20 × 365 + 5 високосных дней (2000, 2004, 2008, 2012, 2016). Этой одной детали — пять дополнительных дней, которые большинство людей забывает — ровно то, почему калькулятор лучше, чем устный счёт.
Возраст в коде
Одно и то же вычисление на каждом языке. Для календарного возраста предпочитайте встроенную библиотеку дат вместо написанной вручную арифметики — она уже знает о високосных годах и длинах месяцев.
1' Целые дни между двумя датами (A1 = рождение, B1 = целевая дата):
2=B1-A1
3
4' Календарный возраст в полных годах / месяцах / остаток дней:
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.