كيف تضيف تقويم هجري برمجي لتطبيقك بسهولة

فريق كودينُشِر في آخرُ تحديثٍ
كيف تضيف تقويم هجري برمجي لتطبيقك بسهولة

أسرع طريقة للحصول على تقويم هجري برمجي داخل تطبيقك هي أن تصف ما تريده بالعربية داخل منصة codeyy لبناء التطبيقات بالذكاء الاصطناعي، وأن تطلب صراحةً «تقويم أم القرى» لا التقويم الحسابي التقريبي. النتيجة حقل تاريخ يعمل خلال دقائق، بلا سطر برمجي واحد. الباقي تفاصيل تصنع الفرق: أي تقويم تختار، كيف تخزّن التواريخ، وكيف تعرضها لمستخدم خليجي اعتاد قراءة التاريخين معاً. سنمرّ على كل نقطة بأمثلة ملموسة من السوق السعودي والخليجي.

ما هو التقويم الهجري البرمجي ولماذا يحتاجه تطبيقك؟

التقويم الهجري البرمجي منظومة تحويل وعرض داخل تطبيقك تُظهر التواريخ بالأشهر القمرية — محرم، صفر، ربيع الأول — وتنقلها تلقائياً من الميلادي وإليه. يحتاجه أي تطبيق يخدم مستخدماً سعودياً أو خليجياً، ببساطة لأن مستنداته الرسمية مؤرخة هجرياً: الهوية الوطنية، الإقامة، رخصة القيادة، وعقود كثيرة. حين تُجبره على الميلادي، تضع أمامه عائقاً حقيقياً.

مثال واقعي. تطبيق تأجير سيارات في الرياض يطلب تاريخ انتهاء الرخصة. الرخصة أمام العميل، والتاريخ المطبوع عليها 1449/03/12. لو طلبت منه التحويل ذهنياً، سيخطئ أو يغادر الصفحة. لاحظتُ هذا مراراً في نماذج التسجيل السعودية؛ نسبة إكمال النموذج تتحسن بمجرد إضافة زر تبديل صغير بين التقويمين.

وهناك بُعد تسويقي يغفل عنه كثيرون. حملاتك الأهم مرتبطة بمواعيد قمرية متحركة: رمضان، عيد الفطر، عشر ذي الحجة. من دون تقويم حقيقي داخل قاعدة البيانات ستعدّل تواريخ الحملات يدوياً كل سنة. مع تقويم مدمج تكتب القاعدة مرة واحدة — «فعّل الخصم من 1 رمضان حتى 29 رمضان» — وينفّذها النظام كل عام بلا تدخل.

ثم يأتي الشعور بالانتماء. حين يقرأ المستخدم «اشتراكك ينتهي في 15 شعبان 1448هـ» بدل تاريخ ميلادي جاف، يشعر أن التطبيق كُتب له لا تُرجم إليه. تفصيلة صغيرة، لكنها تبني ثقة.

تقويم أم القرى أم التقويم الحسابي؟ الفرق الذي يكلّفك يوماً كاملاً

هنا يقع أول خطأ تقني كبير. في المكتبات البرمجية أكثر من نسخة للتقويم الهجري، أشهرها اثنتان: التقويم الحسابي الجدولي (islamic-civil) وتقويم أم القرى (islamic-umalqura).

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

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

تقنياً، المتصفحات الحديثة وبيئة Node تدعمه أصلاً عبر Intl.DateTimeFormat بتمرير المُعرّف ar-SA-u-ca-islamic-umalqura، دون تثبيت أي مكتبة خارجية. من يفضّل المكتبات فأمامه moment-hijri أو @umalqura/core، لكنهما يضيفان وزناً مقابل فائدة محدودة.

ملاحظة عملية قلّ من ينبّه إليها: بيانات أم القرى داخل مكتبات ICU مضبوطة ضمن نطاق سنوات محدود. إن كان تطبيقك يتعامل مع تواريخ ميلاد قديمة جداً أو استحقاقات بعيدة، اختبر الحدود قبل الإطلاق ولا تفترض أن كل سنة ستُحوَّل بسلاسة.

خطوات إضافة تقويم هجري برمجي داخل codeyy

العملية أبسط مما تتخيل، ومصممة لصاحب المشروع غير التقني قبل المبرمج. إليك التسلسل الذي أنصح به:

  • ابدأ بوصف دقيق. بدل «أضف تقويماً»، اكتب: «أضف حقل تاريخ يعرض تقويم أم القرى افتراضياً، مع إمكانية التبديل إلى الميلادي، ويخزّن القيمة ميلادياً في قاعدة البيانات».
  • حدّد اللغة والاتجاه. اطلب واجهة عربية RTL؛ ومنتقي التاريخ ينبغي أن يبدأ أسبوعه من الأحد كما هو معتاد في دول الخليج، لا من الاثنين.
  • اختر نظام الأرقام. ١٤٤٨ أم 1448؟ معظم تطبيقات الخليج تستخدم الأرقام اللاتينية في الواجهات الرقمية، لكن القرار قرارك، وينبغي أن تنصّ عليه في الوصف.
  • اربطه بالبيانات. اطلب ربط الحقل بجدول الطلبات أو الاشتراكات، ثم اعرض التاريخ الهجري داخل الفواتير والإشعارات.
  • راجع النتيجة مباشرة. أدخل تاريخاً من هويتك الفعلية وقارن التحويل بما هو مطبوع عليها. أسرع اختبار ممكن.

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

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

كيف أعرض التاريخين الهجري والميلادي معاً دون إرباك المستخدم؟

اعرض تاريخاً واحداً رئيسياً بحجم واضح، وضع الآخر تحته بخط أصغر أو بين قوسين، هكذا: «12 ربيع الأول 1448هـ (14 أغسطس 2026م)». اجعل الهجري أساساً في الشاشات الموجَّهة للسوق السعودي، والميلادي أساساً في الشاشات المالية والدولية. زر تبديل واحد ثابت في الإعدادات يكفي، على أن يحفظ اختيار المستخدم.

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

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

وللمواعيد المستقبلية، أضف تلميحاً نسبياً بجانب التاريخ: «بعد 12 يوماً». المستخدم الخليجي يقرأ الهجري بطلاقة، لكنه لا يحسب المسافة الزمنية بينه وبين اليوم بسرعة، خصوصاً حين يعبر التاريخ حدود الشهر القمري.

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

أخطاء شائعة في برمجة التقويم الهجري وكيف تتجنبها

أكثر خطأ رأيته تكراراً: تخزين التاريخ كنص هجري في قاعدة البيانات. يبدو منطقياً، ثم تكتشف أنك لا تستطيع الترتيب ولا الفلترة ولا حساب الفروق. القاعدة الذهبية: خزّن ميلادياً بصيغة ISO 8601 بتوقيت UTC، واعرض هجرياً. التحويل يحدث في طبقة العرض فقط.

الخطأ الثاني افتراض أن الشهر الهجري ثلاثون يوماً دائماً. الأشهر القمرية تتراوح بين 29 و30 يوماً بلا نمط ثابت، وأي حساب يعتمد «30 × عدد الأشهر» سينحرف تدريجياً. استخدم دوال التقويم نفسها لإضافة الأشهر.

ثالثاً: ربط دورة الفوترة بالشهر الهجري. لا تفعل. عميل اشترك في 30 رجب سيصطدم بشعبان الذي قد يكون 29 يوماً فقط. أبقِ الفوترة ميلادية واعرض الهجري كمعلومة مساندة.

رابعاً: إهمال المناطق الزمنية. توقيت الخليج +3 يعني أن تاريخاً مخزّناً عند الحادية عشرة مساءً بتوقيت UTC سيظهر لليوم التالي محلياً. اضبط المنطقة الزمنية صراحةً على Asia/Riyadh عند التنسيق، وإلا وصلتك شكاوى غامضة عن «فرق يوم».

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

وأخيراً: لا تعتمد على الحساب وحده في تحديد بداية رمضان أو العيد. الإعلان الرسمي يستند إلى الرؤية، وقد يخالف الحساب بيوم كامل.

حالات استخدام عملية في السوق الخليجي

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

مثال ثانٍ: منصة تقسيط. صيغ التمويل الإسلامي تُحسب مددها أحياناً بالسنة القمرية، والفارق بينها وبين الشمسية نحو أحد عشر يوماً. حساب المدة بالتقويم الخاطئ يعني جدول أقساط منحرفاً منذ الشهر الأول، ونزاعاً مع العميل لاحقاً.

مثال ثالث: نظام موارد بشرية لشركة في جدة. تاريخ ميلاد الموظف السعودي في الهوية هجري، وصلاحية إقامة الوافد هجرية كذلك. تنبيه يقول «تنتهي الإقامة بعد 60 يوماً» محسوباً على التقويم الصحيح يوفّر غرامات حقيقية بالريال.

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

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

الإجازات الرسمية والمناسبات: اجعلها قابلة للتعديل يدوياً

تستحق هذه النقطة قسماً مستقلاً لأن الجميع تقريباً يخطئ فيها. عطلات الخليج نوعان: ثابتة ميلادياً، ومتحركة هجرياً. اليوم الوطني السعودي في 23 سبتمبر ويوم التأسيس في 22 فبراير لا يتغيران. أما عيدا الفطر والأضحى فيتحددان بالرؤية الشرعية وبقرار رسمي يصدر قبل أيام قليلة.

المعنى البرمجي مباشر: لا تُثبّت تواريخ الأعياد داخل الكود. اجعلها سجلات في قاعدة البيانات يعدّلها صاحب التطبيق من لوحة التحكم خلال دقيقة. سيوفّر عليك ذلك تحديثاً طارئاً في الحادية عشرة ليلاً حين يُعلَن أن العيد غداً لا بعد غد.

وإن كان تطبيقك يحسب أيام العمل — تطبيق توصيل يَعِد بالتسليم خلال ثلاثة أيام عمل مثلاً — فضع جدول عطلات لكل دولة على حدة. نهاية الأسبوع في السعودية والإمارات وقطر والكويت والبحرين هي الجمعة والسبت، بينما تختلف الأعياد الوطنية: الإماراتي في 2 ديسمبر، والقطري في 18 ديسمبر، والكويتي في 25 فبراير. تطبيق واحد يخدم الخليج كله يحتاج هذه الجداول جميعها.

أضف كذلك خاصية معاينة السنة القادمة. لوحة تعرض السنة الهجرية المقبلة كاملة مع الإجازات المتوقعة تتيح لفريقك التخطيط مبكراً، وهي ميزة يقدّرها العملاء المؤسسيون أكثر مما تتصور. وإن واجهتك عقبة في الإعداد، فريق دعم codeyy يتعامل مع مثل هذه الحالات يومياً.

قائمة اختبار قبل الإطلاق

قبل النشر، مرّ على هذه النقاط واحدة واحدة. نصف ساعة تكفي، وستوفّر عليك بلاغات محرجة بعد الإطلاق:

  • اختبر اليوم الثلاثين. أدخل تاريخاً في اليوم الثلاثين من شهر ثم أضف شهراً واحداً. هل تعامل النظام بذكاء مع شهر لا يحوي إلا 29 يوماً؟
  • اعبر رأس السنة الهجرية. جرّب تاريخاً في أواخر ذي الحجة وأضف يومين؛ يجب أن تتغير السنة بشكل صحيح.
  • قارن بالمصدر الرسمي. حوّل خمسة تواريخ عشوائية وقارنها بالتقويم الرسمي المنشور حكومياً، لا بأي موقع تحويل عابر.
  • افحص الخط والاتجاه. هل تظهر أسماء الأشهر كاملة بلا اقتطاع؟ «جمادى الآخرة» أطول بكثير من «صفر»، وكثير من الواجهات تنكسر عندها.
  • غيّر المنطقة الزمنية. اضبط جهازك على توقيت مختلف وتأكد أن التاريخ المعروض لا ينزلق يوماً.
  • جرّب على جوال قديم. بعض الأجهزة والمتصفحات القديمة لا تدعم أم القرى في Intl، فاحرص على بديل احتياطي.

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

خلاصة عملية

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

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

الأسئلة الشائعة

هل التقويم الهجري في جوال الأندرويد والآيفون هو نفسه تقويم أم القرى؟

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

كيف أخزّن تاريخ ميلاد المستخدم إذا أدخله بالتقويم الهجري؟

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

هل أستطيع إضافة تقويم هجري لتطبيقي دون خبرة برمجية؟

نعم. اكتب طلبك بالعربية داخل codeyy موضحاً ثلاثة أشياء: نوع التقويم (أم القرى)، اللغة والاتجاه (عربي RTL)، وطريقة التخزين (ميلادي في قاعدة البيانات). المنصة تبني الحقل وتربطه ببياناتك، وتستطيع معاينته وتعديله مباشرة قبل النشر دون فتح أي ملف كود.

كيف أتعامل مع تواريخ الأعياد المتغيرة في حملاتي التسويقية؟

لا تكتب تواريخ الأعياد داخل الكود. اجعلها سجلات في جدول قابل للتعديل من لوحة التحكم، واربط الحملات بالتواريخ الهجرية النسبية مثل «1 شوال». حين يصدر الإعلان الرسمي بموعد العيد، تعدّل سجلاً واحداً خلال دقيقة وتتحدث جميع الحملات والإشعارات المرتبطة به تلقائياً.

اقرأْ أيضًا