Vecuma kalkulators — Precīzs vecums gados, mēnešos un dienās
Bezmaksas vecuma kalkulators: ievadiet savu dzimšanas datumu, lai iegūtu precīzu vecumu gados, mēnešos un dienās, kā arī kopējās nedēļas, dienas, stundas un nākamo dzimšanas dienu.
Vecuma kalkulators
Jūs dzimāt Monday
Nākamā dzimšanas diena: 144 dienas pēc tam (pārvēršoties 37)
Jūsu vecums citos mērvienībās
Dzīves progresa
Jūsu vecums pret ilustratīvu 80 gadu atsauces laidieni.
Dokumentācija
Ko šis kalkulators dara
Ievadiet savu dzimšanas datumu un tas jums precīzi pateiks, cik veci jūs esat — gados, mēnešos un dienās — tāpat kā jūs to teiktu skaļi ("Man ir 33 gadi, 4 mēneši un 5 dienas"). Tas arī parāda šo pašu vecumu rēķinātu tikai mēnešos, nedēļās, dienās, stundās, minūtēs un sekundēs, nedēļas dienu, kurā jūs esat dzimis, un cik ilgs laiks līdz jūsu nākamajam dzimšanas dienai.
Atstājiet otro lauku uz šodienas datuma, lai noskaidrotu savu pašreizējo vecumu, vai mainiet to uz jebkuru pagājušu vai nākotnes datumu, lai atrastu savu vecumu šajā datumā.
Viens noteikums, kas padara gadus grūtus: mēneši un gadi nav fiksēts dienu skaits. Februāris ir 28 vai 29 dienas; pārējie mēneši — 30 vai 31. Tādēļ "1 mēnesis" nozīmē "tajā pašā dienā, vienam mēnesim vēlāk" — nevis "30 dienas". Šis kalkulators seko šim kalendāra noteikumam, tāpēc tas var atšķirties par vienu vai divas dienas no instrumentiem, kas vienkārši dala ar 30 vai 365.
Kā jūsu vecums tiek aprēķināts
Vecums ir atstarpe starp diviem datumiem. Ir divi godīgi veidi, kā izmērīt šo atstarpi, un šis instruments parāda abus.
1. Kalendāra vecums (gadi, mēneši, dienas). Saskaitiet pilnus gadus no jūsu dzimšanas dienas, tad pilnus mēnešus, tad atlikušās dienas:
- Saskaitiet pilnus gadus no dzimšanas.
- No pēdējās dzimšanas dienas saskaitiet pilnus mēnešus.
- No turienes saskaitiet atlikušās dienas.
Smalkā daļa ir 3. solis mēneša robežu tuvumā. Persona, kas dzimusi 31. janvārī, izmērīta 1. martā, ir 1 mēnesis un 1 diena veca — jo "viens mēnesis pēc 31. janvāra" nonāk 28./29. februārī (nav 31. februāra), un 1. marts ir viena diena pēc tam. Šis kalkulators fiksē īsākā mēneša beigās, atbilstoši plaši izmantotajam dateutil.relativedelta noteikumam, lai mēneša beiguma dzimšanas dienas nekad neuzrādītu negatīvu dienu skaitu.
2. Kopējais pagājušais laiks (dienas, stundas, sekundes). "Jūsu vecums citos mērvienībās" skaitļiem abi datumi tiek konvertēti uz pilnu dienu skaitu un reizināti:
Abi datumi ir fiksēti uz UTC pusnakti pirmajā vietā, tāpēc vasaras laika maiņas nevar pievienot vai noņemt stundu un izjaukt dienu skaitu. Nedēļas ir dienas ÷ 7 (noapaļotas uz leju); stundas, minūtes un sekundes ir dienu skaits pārrēķināts.
Kāpēc vienkārši nedalīt dienas ar 365? Jo jūs drift. Dalīšana 7305 dienas ar 365 dod 20,01 gads; dalīšana ar 365,25 dod 20,00 — bet neviens nezina, kurš gadi bija gaisa gadi vai kurš mēnešus jūs faktiski pārcēlāt. Kalendāra skaitīšana ir precīza; dienu dalīšana ir tuvināšana. Izmantojiet kalendāra vecumu "cik vecs esmu", un kopējās dienas/nedēļas precīzam pagājušajam laikam (zāļu dozēšana, projektu ilgums, atskaites punktu atpakaļskaitīšana).
Strādāts piemērs
Dzimis 1. janvārī 2000, izmērīts 1. janvārī 2020:
| Mērs | Vērtība |
|---|---|
| Kalendāra vecums | 20 gadi, 0 mēneši, 0 dienas |
| Kopējās dienas | 7,305 |
| Kopējās nedēļas | 1,043 |
| Nedēļas diena dzimusi | Sestdiena |
7 305 dienas = 20 × 365 + 5 gaisa dienas (2000, 2004, 2008, 2012, 2016). Šis vienas detaļas — piecas papildu dienas, ko lielākā daļa cilvēku aizmirst — ir tieši tāpēc, kāpēc kalkulators pārvar garīgo matemātiku.
Vecums kodā
Tāds pats aprēķins katrā valodā. Kalendāra vecumam, labāk izmantojiet iebūvētu datuma bibliotēku, nevis rokas aritmētiku — tā jau zina gaisa gadus un mēneša garumu.
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
5Bieži uzdotie jautājumi
Cik vecs esmu precīzi? Ievadiet savu dzimšanas datumu un atstājiet mērķi šodienas datumā. Kalkulators parāda jūsu vecumu gados, mēnešos un dienās, un atkārto to kopējās dienās, nedēļās, stundās un sekundēs.
Kāpēc mans vecums atšķiras no cita kalkulatora? Gandrīz vienmēr mēneša/dienas atliek. Instrumenti nesaskaņo, kā skaitīt dienas pēc pēdējā pilnā mēneša mēneša robežu tuvumā. Šis skaņ uz īsākā mēneša (konvencija relativedelta); instruments, kas dala ar 30, atšķirsies par vienu vai divas dienas.
Vai tas apstrādā gaisa gadus un 29. februāra dzimšanas dienas? Jā. Dienu skaits ietver katru gaisa dienu diapazonā, un 29. februāra dzimšanas diena tiek mērīta pret 28. februāri / 1. martu bez gaisa gadiem bez pārplūdes.
Vai es varu aprēķināt vecumu pagājušajā vai nākotnes datumā? Jā — iestatiet lauku "Vecums datumā" uz jebkuru datumu. Nākotnes datums norāda, cik vecs būsiet tad; pagājušais datums, cik vecs bijāt.
Ko par laika zonām? Datumi tiek normalizēti uz UTC pirms skaitīšanas, tāpēc kopējais dienu skaits ir stabils neatkarīgi no tā, kur jūs esat vai vai maiņas laiks mainījās.
Avoti
- Python
dateutil—relativedelta(kalendāra vecuma mēnesa/dienas noteikums, ko seko šis instruments). - Java Platform —
Period.betweenunChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunkcija. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.