Kalkulator Starost — Tačna Starost u Godinama, Mesecima i Danima
Besplatan kalkulator starost: unesite datum vašeg rođenja da biste dobili tačnu starost u godinama, mesecima i danima, plus ukupno nedelja, dana, sati i vaš sledeći rođendan.
Kalkulator Starost
Rođeni ste na Monday
Sledeći rođendan: 144 dana odavde (punite 37)
Vaša starost u ostalim jedinicama
Napredak života
Vaša starost naspram ilustrativnog raspona od 80 godina.
Dokumentacija
Šta ovaj kalkulator radi
Unesite vašu datum rođenja i on će vam reći tačno koliko imate godina — u godinama, mesecima i danima — na isti način kako biste to rekli naglas ("Imam 33 godine, 4 meseca i 5 dana"). Takođe pokazuje istu starost brojanu čisto u mesecima, nedeljama, danima, satima, minutama i sekundama, dan u nedelji kada ste rođeni, i koliko je do vašeg sledećeg rođendana.
Ostavite drugo polje na današnji datum za vašu trenutnu starost, ili ga promenite na bilo koji prošli ili budući datum da biste pronašli vašu starost na taj datum.
Jedno pravilo koje čini starost komplikovanom: meseci i godine nisu fiksni broj dana. Februar ima 28 ili 29; ostali meseci imaju 30 ili 31. Dakle, "1 mesec" znači "isti broj dana, jedan mesec kasnije" — ne "30 dana." Ovaj kalkulator sledi to pravilo kalendara, zbog čega se može razlikovati za dan ili dva od alata koji samo dele sa 30 ili 365.
Kako se vaša starost izračunava
Starost je razlika između dva datuma. Postoji dva poštena načina da se meri ta razlika, i ovaj alat pokazuje oba.
1. Kalendarska starost (godine, meseci, dani). Prebrojite cele godine od vašeg rođendana, zatim cele mesece, zatim preostale dane:
- Prebrojite pune godine od rođenja.
- Od zadnjeg rođendana, prebrojite pune mesece.
- Odatle, prebrojite preostale dane.
Suptilni deo je korak 3 blizu granica meseci. Neko rođen 31. januara, mereno 1. marta, ima 1 mesec i 1 dan — jer "jedan mesec nakon 31. januara" pada na 28/29. februar (nema 31. februara), a 1. mart je jedan dan posle toga. Ovaj kalkulator prilagođava na kraju kraćeg meseca, poklanjajući se često korišćenom pravilu dateutil.relativedelta tako da rođendani na kraju meseca nikada ne proizvode negativan broj dana.
2. Ukupno proteklo vreme (dani, sati, sekunde). Za brojeve "vaša starost u ostalim jedinicama", dva datuma se konvertuju u broj punih dana i pomnože:
Oba datuma su prvo zakačena na UTC ponoć, tako da promene u letnjem vremenu ne mogu dodati ili odbiti sat i iskupiti broj dana. Nedelje su dani ÷ 7 (zaokruženi nadole); sati, minuti i sekunde su broj dana uvećan.
Zašto ne biste samo podelili dane sa 365? Jer biste odstupili. Deljenje 7.305 dana sa 365 daje 20,01 godine; deljenje sa 365,25 daje 20,00 — ali ni jedno ne zna koje godine su bile prestupne ili koje mesece ste zapravo prožili. Brojanje u kalendaru je tačno; deljenje dana je aproksimacija. Koristite kalendarsku starost za "koliko imam godina", a ukupne dane/nedelje za precizna rada sa protekšim vremenom (vreme leka, trajanja projekta, odbrojavanje do prekretnice).
Obrađen primer
Rođen 1. januara 2000., meren 1. januara 2020.:
| Merenje | Vrednost |
|---|---|
| Kalendarska starost | 20 godina, 0 meseci, 0 dana |
| Ukupno dana | 7.305 |
| Ukupno nedelja | 1.043 |
| Dan u nedelji rođenja | Subota |
7.305 dana = 20 × 365 + 5 prestupnih dana (2000, 2004, 2008, 2012, 2016). Taj jedan detalj — pet dodatnih dana što većina ljudi zaboravi — je upravo razlog zašto je kalkulator bolji od mentalnih matematika.
Starost u kodu
Ista kalkulacija u svakom jeziku. Za kalendarsku starost, preferira ugrađenu biblioteku za datume umesto ručno napisane aritmetike — ona već zna prestupne godine i dužine meseci.
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Česta pitanja
Koliko tačno imam godina? Unesite datum vašeg rođenja i ostavite cilj na danas. Kalkulator pokazuje vašu starost u godinama, mesecima i danima, i ponavlja je u ukupnim danima, nedeljama, satima i sekundama.
Zašto se moja starost razlikuje od drugog kalkulatora? Skoro uvek preostala mesec/dan. Alati se ne slažu kako brojati dane posle zadnje pune meseca na granicama meseci. Ovaj se prilagođava kraćem mesiacu (konvencija relativedelta); alat koji deli sa 30 će se razlikovati za dan ili dva.
Rukuje li se prestupnim godinama i rođendanima 29. februara? Da. Brojanja dana uključuju svaki prestupni dan u rasponu, i rođendan 29. februara se meri naspram 28. februara / 1. marta u ne-prestupnim godinama bez preliva.
Mogu li izračunati starost na neki prošli ili budući datum? Da — postavite polje "Starost na datum" na bilo koji datum. Budući datum vam govori koliko ćete tada imati godina; prošli datum, koliko ste imali.
Šta sa vremenskim zonama? Datumi se normalizuju na UTC pre brojanja, tako da je ukupan broj dana stabilan bez obzira gde ste ili da li se letnje vreme promenilo.
Izvori
- Python
dateutil—relativedelta(the calendar-age month/day rule this tool follows). - Java Platform —
Period.betweenandChronoUnit.DAYS. - Microsoft Excel —
DATEDIFfunction. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.