حاسبة العمر — العمر الدقيق بالسنوات والأشهر والأيام
حاسبة عمر مجانية: أدخل تاريخ ميلادك للحصول على عمرك الدقيق بالسنوات والأشهر والأيام، بالإضافة إلى إجمالي الأسابيع والأيام والساعات وعيد ميلادك القادم.
حاسبة العمر
لقد ولدت يوم Monday
عيد الميلاد القادم: 127 يوماً من الآن (تصل إلى 37)
عمرك بوحدات أخرى
تقدم العمر
عمرك مقابل مدة مرجعية توضيحية قدرها 80 سنة.
التوثيق
ما حاسبة العمر؟
تحسب حاسبة العمر المدة الدقيقة بين تاريخين: تاريخ الميلاد وتاريخ مستهدف، يكون عادةً تاريخ اليوم. وتعرض النتيجة بالسنوات والأشهر والأيام، وكذلك كمجموع تراكمي بالأشهر والأسابيع والأيام والساعات والدقائق والثواني. ويمكن أيضًا حساب العمر لتاريخ في الماضي أو المستقبل، لمعرفة عمر الشخص في ذلك اليوم أو العمر الذي سيبلغه فيه.
كيفية حساب العمر
العمر هو الفاصل بين تاريخين تقويميين. توجد طريقتان صحيحتان لوصف هذا الفاصل، وكلتاهما مفيدة لأغراض مختلفة.
العمر التقويمي (بالسنوات والأشهر والأيام)
هذه هي الطريقة اليومية التي يذكر بها الناس أعمارهم، مثل: «33 سنة و4 أشهر و5 أيام». ويُحسب في ثلاث خطوات:
- احسب السنوات الكاملة التي مضت منذ تاريخ الميلاد.
- بدءًا من آخر عيد ميلاد، احسب الأشهر الكاملة التي مضت.
- بعد ذلك، احسب الأيام المتبقية.
تصبح الخطوة 3 معقدة قرب نهاية الشهر، لأن عدد أيام الأشهر ليس متساويًا. فالشخص المولود في 31 يناير، إذا قيس عمره في 1 مارس، يكون عمره 1 شهر و1 يوم. وبعد شهر واحد من 31 يناير يأتي 28 فبراير (أو 29 فبراير في السنة الكبيسة)، إذ لا يوجد 31 فبراير. ويأتي 1 مارس بعد ذلك بيوم واحد. وتُعرف هذه الطريقة أحيانًا باسم قاعدة relativedelta، نسبةً إلى مكتبة بايثون التي نشرتها على نطاق واسع؛ إذ تضبط تاريخ الذكرى السنوية على اليوم الأخير من الشهر الأقصر، حتى لا يصبح عدد الأيام سالبًا.
إجمالي الزمن المنقضي (بالأيام والساعات والثواني)
لإجراء حساب دقيق للزمن الذي عاشه الشخص، يُحوَّل التاريخان إلى نقطة زمنية واحدة، ثم يُحسب الفرق بالأيام الكاملة:
حيث إن d هو عدد الأيام الكاملة، وt هو التاريخ المستهدف، وb هو تاريخ الميلاد، ويُؤخذ كل منها بوصفه عددًا من الملليثواني، والمقسوم عليه هو عدد الملليثواني في يوم واحد.
يُضبط التاريخان على منتصف الليل بالتوقيت العالمي المنسق (UTC) قبل إجراء الطرح. ويمنع ذلك تغييرات التوقيت الصيفي من إضافة ساعة أو حذفها، بما قد يؤدي إلى انحراف عدد الأيام. ومن إجمالي الأيام، يُحسب عدد الأسابيع بقسمة الأيام على 7 مع التقريب إلى الأسفل. أما الساعات والدقائق والثواني، فتُحسب بضرب عدد الأيام في 24 و1,440 و86,400.
تعطي قسمة إجمالي الأيام على 365 أو 365.25 عمرًا تقريبيًا بالسنوات، لكنها لا تعرف أي السنوات ضمن تلك المدة كانت سنوات كبيسة. أما الحساب التقويمي، الموضح أعلاه، فهو دقيق. استخدم العمر التقويمي للإجابة عن سؤال «كم عمري؟». واستخدم إجمالي الأيام أو الأسابيع في المهام التي تتطلب زمنًا منقضيًا دقيقًا، مثل تحديد مواعيد جرعات الدواء أو العد التنازلي إلى موعد مهم.
مثال محلول
شخص مولود في 1 يناير 2000، وقيس عمره في 1 يناير 2020:
| المقياس | القيمة |
|---|---|
| العمر التقويمي | 20 سنة و0 شهر و0 يوم |
| إجمالي الأشهر | 240 |
| إجمالي الأسابيع | 1,043 |
| إجمالي الأيام | 7,305 |
| إجمالي الساعات | 175,320 |
| إجمالي الدقائق | 10,519,200 |
| إجمالي الثواني | 631,152,000 |
| يوم الأسبوع الذي وُلد فيه | السبت |
يساوي إجمالي 7,305 أيام 20 × 365، مضافًا إليها 5 أيام كبيسة للسنوات الكبيسة 2000 و2004 و2008 و2012 و2016. فقد أضافت كل واحدة من تلك السنوات يوم 29 فبراير يقع ضمن مدة قدرها 20 سنة. ولهذا يزيد عدد الأيام على ناتج 20 × 365 البسيط، ولهذا يسهل أن يخطئ حسابه يدويًا ببضعة أيام.
صيغة حساب العمر في الشيفرة
يمكن تنفيذ طريقة حساب العمر التقويمي المذكورة أعلاه في معظم لغات البرمجة. واستخدام مكتبة تواريخ مدمجة أكثر أمانًا من كتابة قواعد السنوات الكبيسة وأطوال الأشهر يدويًا.
1from 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
111const MS_PER_DAY = 86400000;
2
3// Add n months, clamping the day to the target month's last day
4// (31 January + 1 month = 28 February). Date.UTC on its own does not
5// clamp: it would roll that date forward into March.
6function addMonthsUTC(base, n) {
7 const total = base.getUTCMonth() + n;
8 const y = base.getUTCFullYear() + Math.floor(total / 12);
9 const m = ((total % 12) + 12) % 12;
10 const lastDay = new Date(Date.UTC(y, m + 1, 0)).getUTCDate();
11 return Date.UTC(y, m, Math.min(base.getUTCDate(), lastDay));
12}
13
14function calendarAge(birth, target) {
15 let months = (target.getUTCFullYear() - birth.getUTCFullYear()) * 12
16 + (target.getUTCMonth() - birth.getUTCMonth());
17 if (addMonthsUTC(birth, months) > target.getTime()) months -= 1;
18 const anchor = addMonthsUTC(birth, months);
19 return {
20 years: Math.floor(months / 12),
21 months: months % 12,
22 days: Math.floor((target.getTime() - anchor) / MS_PER_DAY),
23 };
24}
25
26const birth = new Date(Date.UTC(2000, 0, 1));
27const target = new Date(Date.UTC(2020, 0, 1));
28
29calendarAge(birth, target); // { years: 20, months: 0, days: 0 }
30Math.floor((target - birth) / MS_PER_DAY); // 7305
311' 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"
6تحذر Microsoft من أن الوسيط "md" قد يعيد رقمًا سالبًا أو عددًا غير صحيح للأيام
قرب حدود الأشهر، لذلك لا يتوافق جزء الأيام المتبقية من تلك الصيغة
دائمًا مع قاعدة الضبط المذكورة أعلاه.
الأسئلة الشائعة
كيف أجد عمري الدقيق؟ أدخل تاريخ الميلاد واترك التاريخ المستهدف على تاريخ اليوم. وتعرض النتيجة العمر بالسنوات والأشهر والأيام، إلى جانب العمر نفسه محسوبًا بإجمالي الأيام والأسابيع والساعات والثواني.
لماذا تعطي حاسبتان للعمر إجابتين مختلفتين؟ يكمن الاختلاف عادةً في طريقة حساب الأيام المتبقية قرب نهاية الشهر. فقد تختلف حاسبة تضبط التاريخ على الشهر الأقصر عند نهاية الشهر، كما وُصف أعلاه، بيوم أو يومين عن حاسبة تقسم الزمن المنقضي ببساطة على 30.
هل يأخذ الحساب السنوات الكبيسة في الاعتبار؟ نعم. يشمل إجمالي الأيام كل شهر 29 فبراير يقع بين التاريخين. وفي السنة التي لا يوجد فيها شهر 29 فبراير، يُحسب تاريخ ذكرى الميلاد في يوم كبيس على أنه 28 فبراير، أي اليوم الأخير من ذلك الشهر. ويكون الشخص المولود في 29 فبراير 1996 قد بلغ من العمر 26 سنة و11 شهرًا و22 يومًا في 20 فبراير 2023، ويحل عيد ميلاده التالي بعد 8 أيام، في 28 فبراير 2023.
هل يمكن حساب العمر لتاريخ في الماضي أو المستقبل؟ نعم. يوضح ضبط التاريخ المستهدف على تاريخ مستقبلي عمر الشخص الذي سيبلغه في ذلك اليوم. أما ضبطه على تاريخ ماضٍ، فيوضح عمره في ذلك الوقت. ولا يمكن أن يكون تاريخ الميلاد نفسه في المستقبل، كما لا يمكن أن يسبق التاريخ المستهدف تاريخ الميلاد.
هل تؤثر المناطق الزمنية في النتيجة؟ لا. يُحوَّل التاريخان إلى منتصف الليل بالتوقيت العالمي المنسق (UTC) قبل حساب عدد الأيام، لذلك يبقى الإجمالي نفسه بغض النظر عن موقع المستخدم أو تغييرات التوقيت الصيفي.
لماذا يختلف عدد الأيام عن قسمة الأيام على 365.25؟ إن 365.25 ليس إلا متوسط طول السنة؛ فهو لا يحدد أي السنوات المحددة ضمن المدة كانت سنوات كبيسة مؤلفة من 366 يومًا. ويُعدّ حساب الأيام الكاملة بين تاريخين تقويميَّين حقيقيين دقيقًا.
المصادر
- بايثون
dateutil—relativedelta، قاعدة الأشهر والأيام للعمر التقويمي الموضحة أعلاه. - منصة Java —
Period.betweenوChronoUnit.DAYS. - Microsoft Excel — دالة
DATEDIF. - مستندات MDN للويب —
Date. - Dershowitz, N. وReingold, E. M. الحسابات التقويمية: الإصدار النهائي. منشورات جامعة كامبريدج، 2018.