تخطي إلى المحتوى الرئيسي
المفضلة

بنية وطرق حساب حاسبات التواريخ

التقويم الذي نستخدمه يومياً له بنية معقدة. فالأشهر تحتوي على عدد مختلف من الأيام، وتظهر في السنوات أيام إضافية مرة كل أربع سنوات. وبسبب هذا التفاوت لا يمكن استخدام الرياضيات العادية ببساطة لحساب التواريخ. فحاسبة التواريخ لا تكفيها عملية الجمع أو الطرح البسيطة، بل تحتاج إلى خوارزمية تحويل متخصصة.

يستند أي حاسبة تواريخ إلى مفهوم تحويل التاريخ التقويمي إلى صيغة خطية. وهذا ضروري للتعامل مع الوقت كخط مستقيم متصل، حيث يُخصص لكل يوم رقمه التسلسلي الخاص.

التمثيل الخطي للتواريخ ونقطة البداية

لا يستطيع النظام "طرح" 15 مارس من 10 فبراير مباشرة، لأن هذين التاريخين يتبعان شهرين مختلفين بعدد أييام مختلف. ولحل هذه المشكلة تستخدم الحاسبة "الحقبة" – تاريخاً محدداً بدقة في الماضي يُعتبر نقطة الصفر.

عندما يُدخل المستخدم تاريخاً، ترجع الخوارزمية إلى التقويم المدمج وتحسب كم يوماً مرّ منذ الحقبة حتى التاريخ المحدد. وفي هذه اللحظة يتحول التقويم إلى سلسلة أرقام عادية: 1، 2، 3، 4 وهكذا.

طريقة حساب الفرق بين التواريخ

عند الحاجة لمعرفة عدد الأيام بين حدثين، تعمل الخوارزمية وفق تسلسل دقيق.

  1. يُحوّل التاريخ الأول المُدخل إلى صيغة رقمية (عدد الأيام منذ الحقبة).
  2. يُحوّل التاريخ الثاني المُدخل بنفس الطريقة إلى صيغة رقمية.
  3. يُطرح الرقم الأصغر من الرقم الأكبر.

النتيجة المحصل عليها هي عدد الأيام التقويمية الدقيق بين الحدثين. وإذا احتاج المستخدم النتيجة بالسنوات والأشهر، فإن الحاسبة لا تقسم الرقم على 30 أو 365. بل تبدأ الخوارزمية "بإرجاع" عدد الأيام المحسوب من تاريخ البداية، حاسبة السنوات الكاملة أولاً، ثم الأشهر الكاملة، وتُخرج الباقي كأيام.

خوارزمية جمع وطرح الفترات الزمنية

عملية جمع الأيام البسيطة تتم عبر النموذج الخطي: يُضاف عدد الأيام المطلوب إلى الرقم التسلسلي لتاريخ البداية، ثم تُحوّل النتيجة عودة إلى التقويم. لكن جمع الأشهر والسنوات أكثر تعقيداً بسبب "القفز" عبر حدود أشهر ذات أطوال مختلفة.

إذا أردنا إضافة شهر واحد إلى 31 يناير، فإن الخوارزمية لا تبحث في التقويم عن "اليوم 31 التالي". بل تزيد فهرس الشهر بواحد وتتحقق مما إذا كان اليوم 31 موجوداً في فبراير. وبما أن فبراير يحتوي على 28 أو 29 يوماً كحد أقصى، ينشأ تعارض.

في مثل هذه الحالات تستخدم الحاسبة طريقة "الاقتطاع". فالنظام يُثبت 28 (أو 29) فبراير كتاريخ نهائي. ولو أضافت الخوارزمية 30 يوماً ميكانيكياً إلى 31 يناير، لكانت النتيجة 2 مارس، مما يكسر منطق إضافة الشهر التقويمي تحديداً.

حساب السنوات الكبيسة

لتحويل التواريخ إلى صيغة رقمية والعكس بشكل صحيح، يجب أن تعرف الحاسبة بالضبط طول كل سنة. وتتحقق الخوارزمية من السنة عبر مرشح رياضي من ثلاثة شروط.

أولاً تُفحص السنة للتحقق من قابليتها للقسمة على أربعة. فإذا لم تقبل السنة القسمة على 4 بدون باقٍ، تُعتبر فوراً سنة عادية (365 يوماً). أما إذا قبلت القسمة، ينتقل النظام إلى الشرط الثاني ويفحص القابلية للقسمة على 100. فالسنة الكبيسة لا يجب أن تقبل القسمة على 100. لكن يوجد شرط ثالث: إذا قبلت السنة القسمة على 100، تصبح كبيسة فقط إذا قبلت القسمة على 400 أيضاً.

بفضل هذا الفحص تعرف الحاسبة أن سنة 2000 كانت كبيسة، بينما سنة 1900 لم تكن. وهذه المعلومة تُراعى في خوارزمية تحويل الأيام، مما يضمن دقة 100% عند عبور حدود فبراير في أي فترة تاريخية.

تحديد يوم الأسبوع

عند تحويل الرقم التسلسلي لليوم عودة إلى التقويم، تحسب الحاسبة يوم الأسبوع أيضاً. وبما أن الأيام تتتابع بشكل صارم، والأسبوع دائماً يتكون من سبعة أيام، يستخدم النظام عملية أخذ الباقي من القسمة (المودولو).

يُقسم الرقم التسلسلي للتاريخ المطلوب على 7. ويشير باقي هذه القسمة إلى يوم أسبوع محدد. فإذا كان الباقي صفراً، فهذا هو اليوم السابع من الأسبوع، وإذا كان واحداً فهو الأول. وتستبعد هذه الطريقة الحاجة إلى تخزين قواعد بيانات ضخمة لأيام الأسبوع لكل تاريخ في التاريخ.

حساب أيام العمل

لحساب أيام العمل تطبق الحاسبة طريقة التصفية. أولاً يُحسب العدد الإجمالي للأيام التقويمية بين التاريخين وفق النموذج الخطي. ثم تمرر الخوارزمية على كل يوم محسوب وتحدد يوم أسبوعه عبر القسمة بالمودولو.

الأيام التي تقع في عطلة نهاية الأسبوع (تختلف الأرقام المحددة للباقي حسب اليوم الذي يبدأ به الأسبوع) تُستبعد من العد الإجمالي. وللحساب مع مراعاة العطلات، تُضاف إلى هذه العملية عملية فحص كل يوم عمل مقابل قاعدة بيانات تواريخ العطلات. وإذا طابق التاريخ عطلة من القاعدة، تُطرح أيضاً من النتيجة النهائية.

بنية الدقة

تعتمد حاسبات التواريخ على منطق رياضي صارم. فتحويل التقويم إلى سلسلة أرقام متصلة يحل المشكلة الرئيسية – عدم انتظام الأشهر والسنوات الكبيسة. وبفضل النموذج الخطي، وفحص القابلية للقسمة، وخوارزميات الاقتطاع عند العبور عبر حدود الأشهر، يستبعد النظام الأخطاء. وتضمن الحساب بالمودولو تحديد أيام الأسبوع دون الحاجة لقواعد بيانات ثقيلة. والنتيجة أن المستخدم يحصل على نتيجة دقيقة بغض النظر عن تعقيد المهمة.


مفهوم التحويل الخطي للتواريخ الموصوف أعلاه هو المنطق الأساسي الذي يسمح بفهم جوهر الخوارزميات. لكن عملياً تعمل أدوات الويب الحديثة بدقة أكبر. ففي بنية مثل هذه التطبيقات (بما فيها مشروعنا) يُستخدم JavaScript، حيث يُحسب التاريخ والوقت ليس بالأيام بل بالميلي ثانية.