بعد خمسة أيام عمل من الجمعة 20 نوفمبر 2026 يكون التاريخ الاثنين 30 نوفمبر 2026 في الولايات المتحدة، لأن عيد الشكر يوم الخميس 26 نوفمبر يُتجاوز (دون هذه العطلة ستكون النتيجة الجمعة 27 نوفمبر). ابدأ بعد التاريخ الذي تختاره وتقدّم يومًا واحدًا في كل مرة، متجاوزًا عطلات نهاية الأسبوع وتواريخ العطلات حتى تمر أيام العمل المطلوبة.
أضف أيام عمل باستخدام واجهة API
استخدم GET /v1/calendars/holidays/{country}/{year} للحصول على تواريخ العطلات للدولة والسنة اللتين يتطلبهما حسابك. تحتفظ دالة Python بتلك التواريخ في مجموعة وتقارن بها كل تاريخ تمر عليه. لا يُحتسب التاريخ إلا إذا كان من الاثنين إلى الجمعة وغير موجود في مجموعة العطلات. تترك التواريخ المتجاوزة عدد أيام العمل المتبقية دون تغيير.
- اضبط مفتاح API الخاص بك احصل على مفتاح API مجاني واحفظه في متغير البيئة
NARWHAL_API_KEY. يقرأ البرنامج النصي ذلك المتغير ويرسل المفتاح بصيغةAuthorization: Bearer YOUR_KEYإلىhttps://api.narwhalapi.com. - اختر تاريخ البداية والدولة مرّر تاريخ البداية وأيام العمل المراد إضافتها ورمز الدولة إلى
add_business_days؛ وتستخدم الدالةUSAافتراضيًا. تاريخ البداية هو اليوم 0، لذا تتقدم الدالة قبل تحديد ما إذا كان التاريخ يُحتسب ضمن الإجمالي. - نفّذ الحساب لإضافة خمسة أيام عمل إلى الجمعة 20 نوفمبر 2026 في الولايات المتحدة، استخدم الاستدعاء في نهاية البرنامج النصي. يطبع
2026-11-30، بعد تجاوز عطلات نهاية الأسبوع وعيد الشكر يوم الخميس 26 نوفمبر 2026.import os from datetime import date, timedelta import requests API = "https://api.narwhalapi.com" HEADERS = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"} def holidays(country: str, year: int) -> set[str]: r = requests.get( f"{API}/v1/calendars/holidays/{country}/{year}", headers=HEADERS, timeout=10 ) r.raise_for_status() return {h["date"] for h in r.json()["holidays"]} def add_business_days(start: date, n: int, country: str = "USA") -> date: off, loaded, day = set(), set(), start while n > 0: day += timedelta(1) if day.year not in loaded: off |= holidays(country, day.year) loaded.add(day.year) if day.weekday() < 5 and day.isoformat() not in off: n -= 1 return day print(add_business_days(date(2026, 11, 20), 5))
تُحمَّل كل سنة مرة واحدة فقط خلال الحساب. عند الانتقال إلى 1 يناير، تطلب الدالة تقويم العطلات لتلك السنة قبل احتساب أي تواريخ فيها. تسجل المجموعة loaded السنوات الموجودة لديها، بينما تحتفظ off بتواريخ عطلاتها. يستمر التقدم حتى يكتمل عدد أيام العمل المطلوبة، ثم يُعاد التاريخ الذي وصل إليه الحساب.
تقرأ الدالة holidays المصفوفة holidays في الاستجابة وتأخذ date من كل سجل. يقارن الحساب تلك القيم مع day.isoformat()، بينما يحدد day.weekday() شرط يوم الأسبوع. يجب تحقق الشرطين قبل إنقاص n. تظل العطلة التي تقع في نهاية الأسبوع تاريخًا متجاوزًا: تتقدم الحلقة يومًا تقويميًا في كل مرة، ولا يمكن لذلك التاريخ أن يقلل العدد المتبقي. القيمة المعادة هي التاريخ الذي يصل إليه الحساب عند اكتمال العد.
استخدم Excel أو Google Sheets
في Excel أو Google Sheets، ضع 26 نوفمبر 2026 في النطاق المسمى Holidays واستخدم WORKDAY مع تاريخ البداية وعدد أيام العمل. عند إضافة خمسة أيام عمل إلى الجمعة 20 نوفمبر 2026، تعيد الصيغة 30 نوفمبر 2026. يحدد نطاق العطلات التواريخ التي يجب تجاوزها إلى جانب عطلات نهاية الأسبوع، لذا ضمّن تواريخ العطلات التي تنطبق على حسابك.
=WORKDAY(DATE(2026,11,20), 5, Holidays)نسّق خلية النتيجة كتاريخ. تعيد WORKDAY رقمًا تسلسليًا، لذا فإن تنسيق التاريخ للخلية هو ما يجعل النتيجة تظهر كتاريخ تقويمي. استخدم WORKDAY.INTL عندما يتطلب حسابك أيامًا أخرى لعطلة نهاية الأسبوع. اجعل تاريخ البداية وعدد أيام العمل ونطاق العطلات مطابقين للحساب الذي تريده؛ فالصيغة تستخدم تواريخ العطلات التي تقدمها. في صيغة المثال، يحدد DATE(2026,11,20) تاريخ البداية ويحدد 5 عدد أيام العمل. يشير Holidays إلى النطاق الذي يحتوي على 26 نوفمبر 2026. لاستخدام جدول البيانات مع تاريخ بداية آخر، غيّر تاريخ البداية المدخل وقدّم العطلات المنطبقة.
متى تستخدم كل خيار
| الحالة | الخيار الأنسب | السبب |
|---|---|---|
| تاريخ واحد | WORKDAY في جدول بيانات | أدخل تاريخ البداية وعدد أيام العمل ونطاق العطلات في صيغة. |
| عمود لتواريخ الفواتير أو مهمة قاعدة بيانات | برنامج Python النصي | مرّر كل تاريخ بداية إلى الدالة مع عدد أيام العمل الخاص به. |
| تاريخ استحقاق في دولة غير دولتك | مرّر رمز تلك الدولة | يستخدم طلب واجهة API تقويم العطلات للدولة التي تختارها. |
ماذا لو كان تاريخ البداية عطلة أو في نهاية الأسبوع؟
اليوم 1 هو أول يوم عمل بعد تاريخ البداية. إضافة يوم عمل واحد إلى السبت 28 نوفمبر 2026 تعطي الاثنين 30 نوفمبر 2026: يُتجاوز الأحد، ويكون الاثنين يوم العمل الذي طلبت إضافته. تنطبق القاعدة نفسها عندما يكون تاريخ البداية نفسه عطلة. يبدأ العد بعد ذلك التاريخ، مع تجاوز عطلات نهاية الأسبوع وتواريخ العطلات خلاله.
هل يمكنني طرح أيام عمل؟
نعم. ارجع إلى الخلف باستخدام timedelta(-1)، مع تجاوز عطلات نهاية الأسبوع وتواريخ العطلات، أو استخدم =WORKDAY(start, -5, Holidays) في جدول بيانات. تطرح تلك الصيغة خمسة أيام عمل من تاريخ البداية باستخدام نطاق العطلات المقدَّم. في Python، طبّق قاعدة الرجوع إلى الخلف عند تعديل الدالة؛ فالبرنامج النصي المقدَّم يتقدم إلى الأمام.
ماذا لو لم يكن للسنة تقويم عطلات منشور؟
تعيد واجهة API القيمة 404 calendar_not_published لتلك الدولة والسنة. يثير raise_for_status() في البرنامج النصي خطأً لهذه الاستجابة، لذا تتوقف الدالة المقدَّمة عندها. يمكنك تعديلها للاعتماد على عطلات نهاية الأسبوع فقط مع تمييز النتيجة، أو إعادة المحاولة لاحقًا. إذا اعتمدت على عطلات نهاية الأسبوع فقط، فميّز التاريخ المعاد حتى تظل طريقة تعامل الحساب مع العطلات واضحة.
مثال تطبيقي: 5 أيام عمل بعد الجمعة 20 نوفمبر 2026
ابدأ بالجمعة 20 نوفمبر 2026 بوصفه اليوم 0. تجاوز عطلة نهاية الأسبوع، ثم احسب الاثنين 23 نوفمبر والثلاثاء 24 نوفمبر والأربعاء 25 نوفمبر بوصفها أيام العمل 1 و2 و3. الخميس 26 نوفمبر هو عيد الشكر في الولايات المتحدة، لذا يبقى العدد عند 3. الجمعة 27 نوفمبر هو يوم العمل 4.
| التاريخ في 2026 | المعالجة | أيام العمل المضافة |
|---|---|---|
| الجمعة 20 نوفمبر | تاريخ البداية | 0 |
| السبت 21 والأحد 22 نوفمبر | تجاوز عطلة نهاية الأسبوع | 0 |
| الاثنين 23 نوفمبر | احتساب | 1 |
| الثلاثاء 24 نوفمبر | احتساب | 2 |
| الأربعاء 25 نوفمبر | احتساب | 3 |
| الخميس 26 نوفمبر | تجاوز عيد الشكر | 3 |
| الجمعة 27 نوفمبر | احتساب | 4 |
| السبت 28 والأحد 29 نوفمبر | تجاوز عطلة نهاية الأسبوع | 4 |
| الاثنين 30 نوفمبر | احتساب وتوقف | 5 |
تجاوز السبت 28 والأحد 29 نوفمبر 2026. الاثنين 30 نوفمبر هو يوم العمل 5، فتكون النتيجة 2026-11-30. دون عطلة عيد الشكر، سيُحتسب الخميس 26 نوفمبر بوصفه يوم العمل 4 والجمعة 27 نوفمبر بوصفه يوم العمل 5، لتكون النتيجة الجمعة 27 نوفمبر 2026 بدلًا من ذلك.
نُشر في .
الخطوات التالية
- أدلة إرشاديةاحسب تاريخ تسوية T+1 أو T+2
- أدلة إرشاديةأضف العطلات إلى شيفرتك
- مرجع APIاقرأ وثائق واجهة API للتقاويم
أنشئ مفتاحًا مجانيًا واستدعِ واجهة API من شيفرتك. احصل على مفتاح API مجاني
