بنية وطرق حساب حاسبات التواريخ
التقويم الذي نستخدمه يومياً له بنية معقدة. تحتوي الأشهر على عدد مختلف من الأيام، وتظهر أيام إضافية في السنوات مرة كل أربع سنوات. بسبب هذا التفاوت، لا يمكن استخدام الرياضيات العادية لحساب التواريخ. حاسبة التواريخ لا تكفيها عملية الجمع أو الطرح البسيطة، بل تحتاج إلى خوارزمية تحويل متخصصة.
يستند أي حاسبة تواريخ إلى مفهوم تحويل التاريخ التقويمي إلى صيغة خطية. هذا ضروري للتعامل مع الوقت كخط مستقيم متصل، حيث يُخصص لكل يوم رقمه التسلسلي.
التمثيل الخطي للتواريخ ونقطة البداية
لا يستطيع النظام "طرح" 15 مارس من 10 فبراير مباشرة، لأن هذين التاريخين ينتميان إلى شهرين مختلفين بعدد أيام مختلف. لحل هذه المشكلة، تستخدم الحاسبة "حقبة" - تاريخ محدد بدقة في الماضي يُعتبر نقطة الصفر.
يدخل المستخدم تاريخاً، فترجع الخوارزمية إلى التقويم المدمج وتحسب كم يوماً مرت منذ الحقبة حتى التاريخ المحدد. في هذه اللحظة، يتحول التقويم إلى سلسلة عادية من الأرقام: 1، 2، 3، 4 وهكذا.
طريقة حساب الفرق بين التواريخ
عند الحاجة لمعرفة عدد الأيام بين حدثين، تعمل الخوارزمية وفق تسلسل صارم.
- يُحول التاريخ الأول المدخل إلى صيغة رقمية (عدد الأيام منذ الحقبة).
- يُحول التاريخ الثاني المدخل بنفس الطريقة إلى صيغة رقمية.
- يُطرح الرقم الأصغر من الرقم الأكبر.
النتيجة المحصل عليها هي العدد الدقيق للأيام التقويمية بين الحدثين. إذا احتاج المستخدم النتيجة بالسنوات والأشهر، لا تقسم الحاسبة الرقم على 30 أو 365. تبدأ الخوارزمية "بإرجاع" عدد الأيام المحصل عليه من تاريخ البداية، حاسبة السنوات الكاملة أولاً، ثم الأشهر الكاملة، وتُخرج الباقي فقط كأيام.
خوارزمية جمع وطرح الفترات
عملية جمع الأيام البسيطة تعمل عبر النموذج الخطي: يُضاف العدد المطلوب من الأيام إلى الرقم التسلسلي لتاريخ البداية، ثم تُحول النتيجة مرة أخرى إلى تقويم. لكن مع جمع الأشهر والسنوات الوضع أكثر تعقيداً بسبب "القفز" عبر حدود الأشهر ذات الأطوال المختلفة.
إذا أردنا إضافة شهر واحد إلى 31 يناير، لا تبحث الخوارزمية في التقويم عن "اليوم 31 التالي". بل تزيد فهرس الشهر بواحد وتتحقق مما إذا كان اليوم 31 موجوداً في فبراير. بما أن فبراير يحتوي على 28 أو 29 يوماً كحد أقصى، يحدث تضارب.
في مثل هذه الحالات، تستخدم الحاسبة طريقة "الاقتطاع". يُثبت النظام 28 (أو 29) فبراير كتاريخ نهائي. لو أضافت الخوارزمية 30 يوماً ميكانيكياً إلى 31 يناير، كانت النتيجة ستكون 2 مارس، مما كان سيخل بمنطق إضافة الشهر التقويمي تحديداً.
حساب السنوات الكبيسة
لتحويل التواريخ بشكل صحيح إلى صيغة رقمية والعكس، يجب أن تعرف الحاسبة بالضبط طول كل سنة. تتحقق الخوارزمية من السنة عبر مرشح رياضي من ثلاثة شروط.
أولاً، تُفحص السنة للتحقق من قابليتها للقسمة على أربعة. إذا لم تقبل السنة القسمة على 4 بدون باقي، تُعتبر فوراً عادية (365 يوماً). إذا قبلت القسمة، ينتقل النظام إلى الشرط الثاني ويفحص القابلية للقسمة على 100. السنة الكبيسة يجب ألا تقبل القسمة على 100. لكن هناك شرط ثالث: إذا قبلت السنة القسمة على 100، تصبح كبيسة فقط إذا قبلت القسمة أيضاً على 400.
بفضل هذا الفحص، تعرف الحاسبة أن سنة 2000 كانت كبيسة، بينما سنة 1900 لم تكن. تُراعى هذه المعلومة في خوارزمية تحويل الأيام، مما يضمن دقة 100% عند عبور حدود فبراير في أي فترة تاريخية.
تحديد يوم الأسبوع
عند تحويل الرقم التسلسلي لليوم مرة أخرى إلى تقويم، تحسب الحاسبة أيضاً يوم الأسبوع. بما أن الأيام تتتابع بشكل صارم، والأسبوع يتكون دائماً من سبعة أيام، يستخدم النظام عملية أخذ الباقي من القسمة (المودول).
يُقسم الرقم التسلسلي للتاريخ المطلوب على 7. باقي هذه القسمة يشير إلى يوم أسبوع محدد. إذا كان الباقي صفراً، فهذا هو اليوم السابع من الأسبوع، وإذا كان واحداً فهو الأول. تستبعد هذه الطريقة الحاجة إلى تخزين جداول ضخمة لأيام الأسبوع لكل تاريخ في التاريخ.
حساب أيام العمل
لحساب أيام العمل، تستخدم الحاسبة طريقة الترشيح. أولاً يُحسب العدد الإجمالي للأيام التقويمية بين التاريخين وفق النموذج الخطي. ثم تمر الخوارزمية على كل يوم محصل عليه وتحدد يوم أسبوعه عبر القسمة على المودول.
الأيام التي تقع في عطلة نهاية الأسبوع (الأرقام المحددة للباقي تعتمد على اليوم الذي يبدأ به الأسبوع)، تُستبعد من الحساب الإجمالي. للحساب مع مراعاة الأعياد، يُضاف إلى هذه العملية فحص كل يوم عمل مقابل قاعدة بيانات التواريخ العطلية. إذا طابق التاريخ عيداً من القاعدة، يُطرح أيضاً من النتيجة النهائية.
بنية الدقة
تستند حاسبات التواريخ إلى منطق رياضي صارم. تحويل التقويم إلى سلسلة رقمية متصلة يحل المشكلة الرئيسية - تفاوت الأشهر والسنوات الكبيسة. بفضل النموذج الخطي، وفحص القابلية للقسمة، وخوارزميات الاقتطاع عند العبور عبر حدود الأشهر، يستبعد النظام الأخطاء. الحساب المودولي يضمن تحديد أيام الأسبوع دون قواعد بيانات ثقيلة. نتيجة لذلك، يحصل المستخدم على نتيجة دقيقة بغض النظر عن تعقيد المهمة.
مفهوم التحويل الخطي للتواريخ الموصوفة أعلاه هي المنطق الأساسي الذي يسمح بفهم جوهر الخوارزميات. لكن في الممارسة، تعمل أدوات الويب الحديثة بدقة أكبر. في بنية مثل هذه التطبيقات (بما فيها مشروعنا)، يُستخدم JavaScript، حيث يتم حساب التواريخ والوقت ليس بالأيام بل بالميلي ثانية.