Kikokotoo cha Umri — Umri Halisi katika Miaka, Miezi na Siku
Kikokotoo cha umri cha bure: ingiza tarehe yako ya kuzaliwa kupata umri halisi katika miaka, miezi na siku, pamoja na vipande vya wiki jumla, siku, saa na siku yako ya kuzaliwa ijayo.
Kikokotoo cha Umri
Ulizaliwa siku ya Monday
Siku ya kuzaliwa ijayo: 144 siku nyingi zaidi (unageuka 37)
Umri wako katika vitengo vingine
Maendeleo ya maisha
Umri wako dhidi ya kiwango cha kusambaza cha miaka 80.
Nyaraka
Ni nini kikokotoo hiki kinachofanya
Andika tarehe ya kuzaliwa yako na itakukumbuza sehemu kwa sehemu ni umri gani — katika miaka, miezi na siku — kama vile ungesema kwa maneno ("Nina umri wa miaka 33, miezi 4 na siku 5"). Inaonyesha pia umri huo huo uliohesabiwa tu katika miezi, vipande vya wiki, siku, saa, dakika na sekunde, siku ya juma iliyozaliwa, na kwa muda gani hadi siku yako ya kuzaliwa ijayo.
Acha sehemu ya pili katika tarehe ya leo kwa umri wako wa sasa, au ibadilishe kuwa tarehe yeyote ya zamani au ya siku zijazo ili kupata umri wako sehemu hiyo tarehe.
Sheria moja inayofanya umri kuwa ngumu: miezi na miaka si idadi isiyobadilika ya siku. Februari ina siku 28 au 29; miezi mingine ina siku 30 au 31. Kwa hivyo "miezi 1" inamaanisha "idadi sawa ya siku, miezi moja baadaye" — si "siku 30." Kikokotoo hiki kinafuata sheria hiyo ya kalenda, kwa sababu inaweza kutofautiana kwa siku moja au mbili kutoka kwa zana zinazo gawanya kwa 30 au 365.
Jinsi ya kukamatia umri wako
Umri ni pengo kati ya tarehe mbili. Kuna njia mbili za kusadika kutokuza pengo hilo, na zana hii inaonyesha zote.
1. Umri wa kalenda (miaka, miezi, siku). Hesabu miaka yote kutoka siku yako ya kuzaliwa, kisha miezi yote, kisha siku zilizobaki:
- Hesabu miaka kamili tangu uzaliwa.
- Kutoka siku ya kuzaliwa ya mwisho, hesabu miezi kamili.
- Kutoka hapo, hesabu siku zilizobaki.
Sehemu ngumu ni hatua ya 3 karibu na mipaka ya miezi. Mtu anayezaliwa siku ya Januari 31, unayopimwa siku ya Machi 1, ni miezi 1 na siku 1 ya umri — kwa sababu "miezi moja baada ya Januari 31" inakaa Februari 28/29 (hakuna Februari 31), na Machi 1 ni siku moja baada ya hiyo. Kikokotoo hiki kinakamata hadi mwisho wa miezi mfupi zaidi, kinakubaliana na sheria inayotumiwa sana dateutil.relativedelta ili siku za kuzaliwa za mwisho wa miezi hazitaji idadi hasi ya siku.
2. Jumla ya wakati uliopita (siku, saa, sekunde). Kwa takwimu "umri wako katika vitengo vingine", tarehe mbili hubadilishwa kuwa hesabu ya siku kamili na kuzidishwa:
Tarehe zote mbili zimefungwa UTC saa ya usiku kwanza, ili mabadiliko ya akiba wa saa ya mwanga haiwezi kuongeza au kuondoa saa na kutupa hesabu ya siku. Vipande vya wiki ni siku ÷ 7 (imezingatiwa chini); saa, dakika na sekunde ni hesabu ya siku iliyopimwa.
Kwa nini si tu kugawanya siku kwa 365? Kwa sababu ungepoteza. Kugawanya siku 7,305 kwa 365 kunatoa miaka 20.01; kugawanya kwa 365.25 kunatoa 20.00 — lakini hata moja haitambui miaka ipi iliyokuwa ni miaka ya kuruka au miezi ipi kweli uliyoishi. Hesabu ya kalenda ni halisi; kugawanya kwa siku ni takaribio. Tumia umri wa kalenda kwa "ni umri gani nami," na jumla ya siku/vipande vya wiki kwa kazi ya sahihi ya wakati uliotembea (walakwa wa dawa, muda wa mradi, hesabu ya mkutano).
Mfano uliotoka kazi
Ulizaliwa Januari 1 2000, unayopimwa Januari 1 2020:
| Kipimo | Thamani |
|---|---|
| Umri wa kalenda | miaka 20, miezi 0, siku 0 |
| Jumla ya siku | 7,305 |
| Jumla ya vipande vya wiki | 1,043 |
| Siku ya juma iliyozaliwa | Jumamosi |
Siku 7,305 = 20 × 365 + siku 5 za kuruka (2000, 2004, 2008, 2012, 2016). Maelezo hayo moja — siku tano za ziada wengi wanasahau — ni sababu halisi kwa nini kikokotoo kinashida hesabu ya akili.
Umri katika kod
Hesabu sawa katika kila lugha. Kwa umri wa kalenda, pendelea maktaba ya tarehe iliyojengwa badala ya hesabu inayobatiliwa — tayari inajua miaka ya kuruka na urefu wa miezi.
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
5Maswali yanayojibu
Umri wangu ni nini haswa? Ingiza tarehe yako ya kuzaliwa na acha lengo katika leo. Kikokotoo kinaonyesha umri wako katika miaka, miezi na siku, na kurudia katika jumla ya siku, vipande vya wiki, saa na sekunde.
Kwa nini umri wangu hutofautiana na kikokotoo kingine? Karibu kila mara ni sehemu ya miezi/siku iliyobaki. Zana zina silika tofauti kwa jinsi ya kutmbua siku baada ya miezi kamili katika mipaka ya miezi. Hii inakamata miezi mfupi zaidi (muktawa wa relativedelta); zana inayogawanya kwa 30 itakuwa na tofauti kwa siku moja au mbili.
Je, inatunza miaka ya kuruka na siku za Februari 29? Ndiyo. Hesabu ya siku inajumuisha kila siku ya kuruka katika safu, na siku ya Februari 29 inakusudiwa kwa siku ya Februari 28 / Machi 1 katika miaka isiyo na kuruka bila kuingilia kwa ziada.
Je, naweza kuhesabu umri katika tarehe ya zamani au ya siku zijazo? Ndiyo — weka sehemu ya "Umri katika tarehe" kuwa tarehe yeyote. Tarehe ya siku zijazo inakuambia umri utakuwa; tarehe ya zamani, umri ulikuwa.
Ni nini kuhusu maeneo ya wakati? Tarehe hubadilishwa kuwa UTC kabla ya kutobua, kwa hivyo jumla ya siku kamili ni thabiti bila kujali mahali ulipo au kama akiba wa saa ya mwanga ilibadilika.
Vyanzo
- Python
dateutil—relativedelta(sheria ya miezi/siku ya umri wa kalenda zana hii inafuata). - Java Platform —
Period.betweennaChronoUnit.DAYS. - Microsoft Excel —
DATEDIFchaguo`. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.