حاسبة العمر — العمر الدقيق بالسنوات والأشهر والأيام
حاسبة عمر مجانية: أدخل تاريخ ميلادك للحصول على عمرك الدقيق بالسنوات والأشهر والأيام، بالإضافة إلى إجمالي الأسابيع والأيام والساعات وعيد ميلادك القادم.
حاسبة العمر
لقد ولدت يوم Monday
عيد الميلاد القادم: 144 يوماً من الآن (تصل إلى 37)
عمرك بوحدات أخرى
تقدم العمر
عمرك مقابل مدة مرجعية توضيحية قدرها 80 سنة.
التوثيق
ما يفعله هذا الحاسب
أدخل تاريخ ميلادك وسيخبرك بالضبط كم عمرك — بالسنوات والأشهر والأيام — بنفس الطريقة التي تقول بها ("عمري 33 سنة و4 أشهر و5 أيام"). يعرض أيضاً نفس العمر محسوباً بشكل صريح بالأشهر والأسابيع والأيام والساعات والدقائق والثواني، واليوم الذي ولدت فيه، ومدة الانتظار حتى عيد ميلادك القادم.
اترك الحقل الثاني على تاريخ اليوم لمعرفة عمرك الحالي، أو غيّره إلى أي تاريخ ماضٍ أو مستقبلي للعثور على عمرك في ذلك التاريخ.
القاعدة الوحيدة التي تجعل حساب العمر معقداً: الأشهر والسنوات ليست عدداً ثابتاً من الأيام. فبراير به 28 أو 29 يوماً؛ والأشهر الأخرى بها 30 أو 31. لذا "شهر واحد" يعني "نفس رقم اليوم، بعد شهر واحد" — وليس "30 يوماً." يتبع هذا الحاسب تلك القاعدة الزمنية، ولهذا قد يختلف بيوم أو اثنين عن الأدوات التي تقسم فقط على 30 أو 365.
كيفية حساب عمرك
العمر هو الفجوة بين تاريخين. هناك طريقتان صحيحتان لقياس تلك الفجوة، وتعرض هذه الأداة كلاهما.
1. العمر الزمني (سنوات وأشهر وأيام). احسب السنوات الكاملة من تاريخ ميلادك، ثم الأشهر الكاملة، ثم الأيام المتبقية:
- احسب السنوات الكاملة منذ الولادة.
- من آخر عيد ميلاد، احسب الأشهر الكاملة.
- من هناك، احسب الأيام المتبقية.
الجزء الدقيق هو الخطوة 3 بالقرب من حدود الأشهر. شخص وُلد في 31 يناير، محسوباً في 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 —
DATEDIFfunction. - MDN Web Docs —
Date. - Dershowitz, N., & Reingold, E. M. Calendrical Calculations: The Ultimate Edition. Cambridge University Press, 2018.