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

تحديد يوم لأي تاريخ باستخدام مجموعة متنوعة من الخوارزميات

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

المفاهيم

عدل

في الحساب العددي يتم تمثيل أيام الأسبوع بأرقام أيام الأسبوع. إذا كان يوم الاثنين هو اليوم الأول من الأسبوع فمن الممكن ترميز الأيام من 1 إلى 7، وذلك من الاثنين إلى الأحد كما هو متبع في آيزو 8601. كما يمكن أيضًا حساب اليوم المحدد بالرقم 7 على أنه 0، وذلك بتطبيق المعامل الحسابي 7 الذي يحسب الباقي من الرقم بعد القسمة على 7. وبالتالي يتم التعامل مع الرقم 7 على أنه 0، والرقم 8 على أنه ، والرقم 9 على أنه 2، والرقم 18 على أنه 4 وهكذا. فإذا تم احتساب يوم الأحد باعتباره اليوم الأول فبعد 7 أيام ( أي اليوم الثامن هو أيضًا يوم أحد واليوم الثامن عشر هو نفس اليوم الرابع وهو يوم أربعاء لأنه يقع بعد يوم الأحد بثلاثة أيام ( أي إنه 18 عامل قسمة مع باقي 7 = 4). [ا]

معيار الاثنين يوم الثلاثاء الأربعاء يوم الخميس جمعة السبت الأحد أمثلة الاستخدام
ايزو 8601 1 2 3 4 5 6 7 %_ISODOWI%, %@ISODOWI[]% (4DOS);[1] DAYOFWEEK() (HP Prime)[2]
0 1 2 3 4 5 6
2 3 4 5 6 7 1 %NDAY OF WEEK% (NetWare، DR-DOS[3]); %_DOWI%, %@DOWI[]% (4DOS)[1]
1 2 3 4 5 6 0 الآلات الحاسبة المالية من HP

النهج الأساسي لجميع الطرق تقريبًا لحساب يوم الأسبوع يبدأ بالبدء من "تاريخ ثابت": زوج معروف (مثل 1 يناير 1800 باعتباره يوم أربعاء)، وتحديد عدد الأيام بين اليوم المعروف واليوم الذي تحاول تحديده واستخدام عامل القسمة مع باقي لحساب 7 للعثور على يوم عددي جديد في الأسبوع.

أحد الأساليب القياسية هو البحث عن (أو حساب باستخدام قاعدة معروفة) قيمة اليوم الأول من الأسبوع في قرن معين، والبحث عن (أو حساب باستخدام طريقة التطابق) تعديل للشهر، وحساب عدد السنوات الكبيسة منذ بداية القرن، ثم إضافة هذه النتائج مع عدد السنوات منذ بداية القرن ورقم يوم الشهر. في النهاية ينتهي الأمر بعدد الأيام الذي نطبق عليه عامل القسمة مع باقي 7 لتحديد يوم الأسبوع للتاريخ.[4]

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

الأيام المقابلة

عدل

كل يوم سابع في الشهر له نفس اسم اليوم السابق:

يوم من

الشهر

d
00 07 14 21 28 0
01 08 15 22 29 1
02 09 16 23 30 2
03 10 17 24 31 3
04 11 18 25 4
05 12 19 26 5
06 13 20 27 6

الأشهر المقابلة

عدل

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

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

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

سنوات مشتركة السنوات الكبيسة كل السنوات m
يناير أكتوبر 0
يمكن 1
فبراير أغسطس 2
فبراير مارس نوفمبر 3
يونيو 4
سبتمبر ديسمبر 5
يناير ابريل يوليو 6

السنوات المقابلة

عدل

هناك سبعة أيام محتملة لبدء العام والسنوات الكبيسة سوف تغير يوم الأسبوع بعد 29 فبراير. وهذا يعني أن هناك 14 تكوينًا يمكن أن يتضمنها العام. يمكن الإشارة إلى جميع التكوينات بحرف أبجدي ولكن بما أن 29 فبراير ليس له حرف مخصص له، فإن السنة الكبيسة لها حرفان أبجديان، أحدهما لشهري يناير وفبراير والآخر (خطوة واحدة إلى الوراء في التسلسل الأبجدي) من مارس إلى ديسمبر.

عام 2021 هو عام عادي يبدأ يوم الجمعة مما يعني أنه يتوافق مع العام التقويمي 2010. ويتوافق الشهرين الأولين من عام 2021 مع الشهرين الأولين من عام 2016. كذلك عام 2022 هو عام عادي يبدأ يوم السبت، مما يعني أنه يتوافق مع العام التقويمي 2011. والأشهر العشرة الأخيرة من عام 2022 تتوافق مع الأشهر العشرة الأخيرة من عام 2016. وعام 2023 هو عام عادي يبدأ يوم الأحد، مما يعني أنه يتوافق مع العام التقويمي 2017. 2024 هي سنة كبيسة تبدأ يوم الاثنين، مما يعني أنها تتوافق مع السنة التقويمية 1996. والشهرين الأولين من عام 2024 يتوافقان مع الشهرين الأولين من عام 2018. الأشهر العشرة الأخيرة من عام 2024 تتوافق مع الأشهر العشرة الأخيرة من عام 2019.

كل سنة كبيسة تتكرر مرة كل 28 سنة، وكل سنة عادية تتكرر مرة كل 6 سنوات ومرتين كل 11 سنة. على سبيل المثال كان آخر ظهور للسنة الكبيسة التي بدأت يوم الأربعاء هو عام 2020، وسيكون الظهور القادم في عام 2048. وبالمثل فإن السنوات المشتركة القادمة التي تبدأ يوم الجمعة ستكون 2027 و2038 ثم 2049. كلا العبارتين صحيحتان ما لم يتم تخطي سنة كبيسة، ولكن هذا لن يحدث حتى عام 2100.

للتفاصيل انظر الجدول أدناه.

عامل قسمة مع باقي للسنة من

القرن 28

y
00 06 12 17 23 0
01 07 12 18 24 1
02 08 13 19 24 2
03 08 14 20 25 3
04 09 15 20 26 4
04 10 16 21 27 5
05 11 16 22 00 6

ملحوظات:

  • اللون الأسود يعني جميع أشهر السنة المشتركة
  • اللون الأحمر يعني الشهرين الأولين من السنة الكبيسة
  • اللون الأزرق يعني آخر 10 أشهر من السنة الكبيسة

القرون المقابلة

عدل
القرن اليولياني

عامل قسمة 700

القرن الميلادي

عامل قسمة 400 [ب]

يوم
400: 1100 1800 ... 300: 1500 1900 ... شمس
300: 1000 1700 ... الاثنين
200 0900 1600 ... 200: 1800 2200 ... الثلاثاء
100 0800 1500 ... تزوج
700: 1400 2100 ... 100: 1700 2100 ... الخميس [ج]
600: 1300 2000 ... الجمعة
500: 1200 1900 ... 000: 1600 2000 ... قعد

"السنة 000" هي -في التسلسل الزمني العادي- السنة 1 قبل الميلاد (التي تسبق السنة 1 بعد الميلاد). وفي الترقيم الفلكي للسنوات يأتي العام 0 بين 1 قبل الميلاد و1 بعد الميلاد. أما في التقويم اليولياني المسبق (أي التقويم اليولياني كما كان ليكون لو تم تشغيله بشكل صحيح منذ البداية) فيبدأ عام 1 قبل الميلاد يوم الخميس. وفي التقويم الغريغوري المبكر (سمي بهذا الاسم لأنه لم يتم ابتكاره حتى عام 1582) يبدأ العام 1 قبل الميلاد يوم السبت.

طرق جدولية لحساب يوم الاسبوع

عدل

الجدول الكامل: التقويمات الجوليانية والغريغورية

عدل

بالنسبة للتواريخ الجوليانية قبل عام 1300 وبعد عام 1999 يجب استخدام السنة الموجودة في الجدول والتي تختلف بمضاعف دقيق يبلغ 700 عام. وبالنسبة للتواريخ الميلادية بعد عام 2299 فيجب استخدام السنة الموجودة في الجدول والتي تختلف بمضاعف دقيق يبلغ 400 عام. كما تشير القيم " r0 " إلى " r6 " إلى الباقي عند قسمة قيمة المئات على 7 و4 على التوالي، مما يشير إلى كيفية امتداد السلسلة في أي اتجاه. ويتم عرض القيم الجوليانية والغريغورية من عام 1500 إلى عام 1999 للراحة. وتشير الأرقام المكتوبة بخط غامق (على سبيل المثال 04 ) إلى السنة الكبيسة. فإذا انتهت السنة بالرقم 00 وكانت المئات فيها مكتوبة بالخط العريض فهي سنة كبيسة. وهكذا يشير الرقم 19 إلى أن عام 1900 ليس سنة كبيسة غريغورية (ولكن الرقم 19 في العمود اليولياني يشير إلى أنها سنة كبيسة جوليانية، كما هي الحال مع جميع السنوات اليوليانية x 00). حيث يشير الرقم 20 إلى أن عام 2000 هي سنة كبيسة. استخدم Jan و Feb فقط في السنوات الكبيسة.

رقم المئات من السنين تكملة أرقام السنة المتبقية الشهر DoW #
اليوليوسي

(r ÷ 7)

الميلادي

(r ÷ 4)

r5 19 16 20 r0 00 06   17 23 28 34   45 51 56 62   73 79 84 90 Jan Oct Sa 0
r4 18 15 19 r3 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 May Su 1
r3 17 ___ 02   13 19 24 30   41 47 52 58   69 75 80 86   97 Feb Aug M 2
r2 16 18 22 r2 03 08 14   25 31 36 42   53 59 64 70   81 87 92 98 Feb Mar Nov Tu 3
r1 15 ___   09 15 20 26   37 43 48 54   65 71 76 82   93 99 Jun W 4
r0 14 17 21 r1 04 10   21 27 32 38   49 55 60 66   77 83 88 94 Sep Dec Th 5
r6 13 ___ 05 11 16 22 33 39 44 50 61 67 72 78 89 95 Jan Apr Jul F 6

لتحديد يوم الأسبوع (السبت 1 يناير 2000)

  • يوم الشهر: 1 ~ 31 (1)
  • الشهر: (6)
  • السنة: (0)
  • القرن الرابع للتقويم الميلادي والقرن السابع للتقويم اليولياني (0) .
  • إضافة 1+6+0+0=7. بقسمة العدد على 7 يبقى 0، وبالتالي فإن يوم الأسبوع هو السبت.

الصيغة هي w = (d + m + y + c) mod 7.

التقويم اليولياني المنقح

عدل

لاحظ أن التاريخ (وبالتالي يوم الأسبوع) في التقويمين اليولياني والغريغوري المنقحين هو نفسه من 14 أكتوبر 1923 إلى 28 فبراير 2800 م ضمنًا، وأنه بالنسبة للسنوات الكبيرة قد يكون من الممكن طرح 6300 أو مضاعفاته قبل البدء للوصول إلى سنة تقع ضمن الجدول أو أقرب إليه.

للبحث عن يوم الأسبوع لأي تاريخ لأي عام باستخدام الجدول، اطرح 100 من السنة ثم قسّم الفرق على 100 واضرب الحاصل الناتج (مع حذف الكسور) في سبعة ثم قسّم الناتج على تسعة. لاحظ الحاصل (حذف الكسور). أدخل الجدول بالسنة اليوليانية وقبل القسمة النهائية أضف 50 واطرح الحاصل المذكور أعلاه.

مثال: ما هو يوم الأسبوع 27 يناير 8315؟

8315−6300=2015، 2015−100=1915، 1915/100=19 الباقي 15، 19×7=133، 133/9=14 الباقي 7. إن عام 2015 متقدم عن عام 1315 بـ 700 سنة، لذا يتم استخدام 1315. من الجدول : للمئات (13): 6. للأرقام المتبقية (15): 4. للشهر (يناير): 0. للتاريخ (27): 27. 6 + 4 + 0 + 27 + 50 − 14 = 73 . 73/7=10 الباقي 3. يوم الأسبوع = الثلاثاء.

حرف الدومينيكال

عدل

للعثور على الحرف الدومينيكي احسب يوم الأسبوع إما 1 يناير أو 1 أكتوبر. إذا كان يوم الأحد فإن الحرف الدومينيكي هو A، وإذا كان يوم السبت B، وبالمثل إلى الوراء عبر الأسبوع وإلى الأمام عبر الأبجدية إلى يوم الاثنين وهو G.

السنوات الكبيسة لها حرفان الأحد لذلك بالنسبة لشهري يناير وفبراير احسب يوم الأسبوع في الأول من يناير، وبالنسبة لشهري مارس إلى ديسمبر احسب يوم الأسبوع في الأول من أكتوبر.

السنوات الكبيسة هي كل السنوات التي تقسم على أربعة بالضبط مع الاستثناءات التالية:

في التقويم الغريغوري: كل السنوات التي تقسم بالضبط على 100 (بخلاف تلك التي تقسم بالضبط على 400).

في التقويم اليولياني المنقح: كل السنوات التي تقسم بالضبط على 100 (بخلاف تلك التي تعطي الباقي 200 أو 600 عند القسمة على 900).

"يوم القيامة"

عدل

هذه قطعة أثرية من الرياضيات الترفيهية. انظر قاعدة يوم القيامة للحصول على توضيح.

التحقق من النتيجة

عدل

استخدم هذا الجدول للعثور على يوم الأسبوع دون أي حسابات.

فِهرِس الإثنين

A

الثلاثاء

B

الأربعاء

C

الخميس

D

الجمعة

E

السبت

F

الأحد

G

التقويم الغريغوري واليوليوسي الدائم

استخدم يناير وفبراير للسنوات الكبيسة حرف التاريخ في صف السنة للحرف في صف القرن كل أيام سي هي أيام محتملة ليوم القيامة

القرن اليوليوسي القرن الميلادي التاريخ 01

08 15 22 29

02

09 16 23 30

03

10 17 24 31

04

11 18 25

05

12 19 26

06

13 20 27

07

14 21 28

12 19 16 20 Apr Jul Jan G A B C D E F 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96
13 20 Sep Dec F G A B C D E 02 13 19 24 30 41 47 52 58 69 75 80 86 97
14 21 17 21 Jun E F G A B C D 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98
15 22 Feb Mar Nov D E F G A B C 09 15 20 26 37 43 48 54 65 71 76 82 93 99
16 23 18 22 Aug Feb C D E F G A B 04 10 21 27 32 38 49 55 60 66 77 83 88 94
17 24 May B C D E F G A 05 11 16 22 33 39 44 50 61 67 72 78 89 95
18 25 19 23 Jan Oct A B C D E F G 06 17 23 28 34 45 51 56 62 73 79 84 90 00
[السنة/100] القرن الميلادي 20

16

21

17

22

18

23

19

عامل القسمة مع باقي للسنة 100
القرن اليوليوسي 19

12

20

13

21

14

22

15

23

16

24

17

25

18

أمثلة:

  • للطريقة الشائعة

26 ديسمبر 1893 (جي.دي.)

ديسمبر يقع في الصف F و26 في العمود E لذا فإن حرف التاريخ هو C الموجود في الصف F والعمود E. 93 (السنة عامل قسمة 100) يقع في الصف D (صف السنة) والحرف C في صف السنة يقع في العمود G. 18 ([السنة/100] في عمود القرن الغريغوري) يقع في الصف C (صف القرن) والحرف في صف القرن والعمود G هو B لذا فإن يوم الأسبوع هو الثلاثاء.

13 أكتوبر 1307 (جيه.دي)

13 أكتوبر هو يوم F. الحرف F في صف السنة (07) يقع في العمود G. والحرف في صف القرن (13) والعمود G هو E، لذا فإن يوم الأسبوع هو الجمعة.

1 يناير 2000 (جي.دي)

يتوافق 1 يناير مع G ويتوافق G في صف السنة ( 0 0) مع F في صف القرن ( 20 ) ويتوافق F مع يوم السبت.

صيغة موجزة للطريقة: "حرف التاريخ (G) الحرف (G) في صف السنة ( 0 0) والحرف (F) في صف القرن ( 20 )، وبالنسبة لليوم يصبح الحرف (F) يوم عمل (السبت)".

طريقة حرف الأحد

يتم تخصيص حرف لكل يوم من أيام السنة (باستثناء 29 فبراير) في التسلسل المتكرر ABCDEFG. وتبدأ السلسلة بـ A في 1 يناير وتستمر إلى A مرة أخرى في 31 ديسمبر. حرف الأحد هو الحرف الذي يقف أمام كل أيام الأحد في السنة. نظرًا لأن يوم 29 فبراير ليس له حرف فهذا يعني أن حرف الأحد من مارس إلى ديسمبر تتراجع خطوة واحدة في التسلسل مقارنة بحرف يناير وفبراير. كما سيتم العثور على الحرف الخاص بأي تاريخ حيث يلتقي الصف الذي يحتوي على الشهر (باللون الأسود) على يسار "المربع اللاتيني" مع العمود الذي يحتوي على التاريخ أعلى "المربع اللاتيني". وسيتم العثور على حرف الأحد حيث يلتقي العمود الذي يحتوي على القرن (أسفل "المربع اللاتيني") مع الصف الذي يحتوي على آخر رقمين من السنة على يمين "المربع اللاتيني". وبالنسبة للسنة الكبيسة فإن حرف الأحد الموجود بهذه الطريقة هو الحرف الذي ينطبق على الفترة من مارس إلى ديسمبر.

على سبيل المثال للعثور على يوم الأسبوع 16 يونيو 2020:

العمود "20" يلتقي الصف "20" في "D". الصف "يونيو" يلتقي العمود "16" في "F". بما أن الحرف F هو حرفين بعد الحرف D، فإن يوم الأسبوع هو يومين بعد الأحد أي يوم الثلاثاء.

الخوارزميات الرياضية

عدل

ريت داي

عدل

تعمل طريقة ريت داي عن طريق جمع عدد الأيام d التي مرت منذ تاريخ يوم معروف من أيام الأسبوع D ثم يتم تحديد يوم الأسبوع بواسطة (D + d) عامل قسمة مع باقي 7 ، بما يتوافق مع أي اتفاقية تم استخدامها لترميز D.

على سبيل المثال تاريخ 13 أغسطس 2009 هو 733632 يومًا من 1 يناير 1م. إن أخذ الرقم لعامل القسمة 7 يعطينا 4 ومن ثم يوم الخميس.

خوارزمية جاوس

عدل

وصف كارل فريدريش جاوس طريقة لحساب يوم الأسبوع في الأول من يناير في أي عام معين في مذكرة مكتوبة بخط اليد في مجموعة من الجداول الفلكية.[5] لكن لم يقم بنشره أبدًا. وقد تم تضمينه أخيرًا في أعماله المجمعة في عام 1927.[6] وبالمقارنة مع ريت داي تساعد النتيجة على تبسيط حساب السنوات.

كانت طريقة جاوس قابلة للتطبيق على التقويم الغريغوري. فقد قام بترقيم أيام الأسبوع من 0 إلى 6 بدءًا من يوم الأحد. وقد حدد العملية التالية:

المدخلات
رقم السنة A، رقم الشهر M، رقم التاريخ D.
الناتج
يوم من السنة.
إجراء
  1. أولاً قم بتحديد يوم الأسبوع d1 من 1 يناير.
    • بالنسبة للتقويم الغريغوري، يوم الأسبوع هو[5]
           

(1 + 5((A−1) % 4) + 4((A−1) % 100) + 6((A−1) % 400)) % 7. بدلاً من ذلك، اضبط C = A \ 100 ، Y = A % 100 ، والقيمة هي
     

(1 + 5((Y−1)%4) + 3(Y−1) + 5(C%4)) % 7.

    • بالنسبة للتقويم اليولياني، يوم الأسبوع هو
           

(6 + 5((A−1)%4) + 3(A−1)) % 7 أو
      (6 + 5((Y−1) % 4) + 3(Y−1) + 6C) % 7 .

  1. قم الآن بتحديد الإزاحة المرتبطة بالشهر m باستخدام جدول البحث مع M.
  2. العودة d = (d1 + m + D) % 7.
جدول تعويضات الأشهر
شهور يناير فبراير مارس أبريل يمكن يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر
سنوات مشتركة 0 3 3 6 1 4 6 2 5 0 3 5
السنوات الكبيسة 4 0 2 5 0 3 6 1 4 6
يمكن تلخيص الإجراء المذكور أعلاه في تعبير واحد للحالة الغريغورية:
     

(D + m + 5((A−1)%4) + 4((A−1)%100) + 6((A−1)%400))%7

مثال عملي

عدل

بالنسبة للسنة رقم 2000، A − 1 = 1999 ، Y − 1 = 99 و C = 19، فإن يوم الأسبوع 1 يناير هو

= (1 + 5(1999%4) + 4(1999%100) + 6(1999%400))%7
= (1 + 1 + 4 + 0) % 7
= 6
= (1 + 5(99%4) + 3 × 99 + 5(19%4))%7
= (1 + 1 + 3 + 1)%7
= 6 = Saturday.

أيام الأسبوع ليوم 30 أبريل 1777 و23 فبراير 1855 هي

= (30 + 6 + 5(1776%4) + 4(1776%100) + 6(1776%400))%7
= (2 + 6 + 0 + 3 + 6)%7
= 3 =Wednesday

و

= (6 + 23 + ⌈2.6 × 12⌉ + 5(1854%4) + 4(1854%100) + 6(1854%400))%7
= (6 + 2 + 4 + 3 + 6 + 5)%7
= 5 = Friday.

الشرح والملاحظات

عدل

يمكن إثبات خوارزمية يوم الأسبوع 1 يناير باستخدام الحساب النمطي. النقطة الرئيسية هي أنه نظرًا لأن 365 % 7 = 1 فإن كل عام يضيف يومًا واحدًا إلى التقدم. والباقي هو تعديل للسنة الكبيسة. الإصدارات المستندة إلى القرن تحتوي على 36525 % 7 = 6.

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

تم تحويل هذه الصيغة أيضًا إلى طرق بيانية وجدولية لحساب أي يوم من أيام الأسبوع بواسطة كريتشيك وشفيردتفيغر.[6][7]

اختلافات متباينة

عدل

الصيغة التالية هي مثال لإصدار بدون جدول بحث. من المفترض أن يبدأ العام في شهر مارس مما يعني أنه يجب التعامل مع التواريخ في شهري يناير وفبراير على أنها جزء من العام السابق. وصيغة التقويم الغريغوري هي[8]

 

أين

  • d هو يوم الشهر (1 to 31)
  • m هو الشهر المتغير (مارس = 1,...,فبراير = 12)
  • Y هي السنة إلا إذا كان m هو 11 = يناير or 12 = فبراير والتي تعتبر جزءا من العام السابق، مُعطى Y = السنة − 1
  • c هو القرن الذي تقدمه  
  • y هي السنة بالنسبة للقرن، مُعطى بواسطة  , أو ببساطة آخر رقمين منY
  • w هو يوم من أيام الأسبوع (0 = أحد,...,6 = سبت)
جدول تعويضات الأشهر (   )
شهور مارس أبريل يمكن يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر يناير فبراير
الإزاحة 2 5 7 10 12 15 18 20 23 25 28 31

خوارزمية زيلر

عدل

في خوارزمية زيلر، يتم ترقيم الأشهر من 3 لشهر مارس إلى 14 لشهر فبراير. من المفترض أن تبدأ السنة في شهر مارس؛ وهذا يعني، على سبيل المثال، أن شهر يناير 1995 يجب أن يُعامل باعتباره الشهر الثالث عشر من عام 1994. [9] صيغة التقويم الغريغوري هي

  أين

  •   هو يوم الشهر (1 إلى 31)
  •   هو الشهر المحول (مارس = 3، ...يناير = 13، فبراير = 14)
  •   هل السنة ما لم   13 = يناير أو 14 = فبراير والتي تعتبر جزءًا من العام السابق  
  •   هو القرن الذي أعطاه  
  •   هي السنة بالنسبة للقرن، والتي يتم إعطاؤها بواسطة   ، أو ببساطة آخر رقمين من  
  •   هو يوم الأسبوع (1 = الأحد،..0 = السبت)
جدول تعويضات الأشهر (   )
شهور مارس أبريل يمكن يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر ديسمبر يناير فبراير
الإزاحة 10 13 15 18 20 23 26 28 31 33 36 39

الفرق الوحيد هو بين خوارزمية زيلر ( Z ) وخوارزمية غاوس المتباينة ( G )، أي ZG = 1 = الأحد .

 
  (مارس = 3 في Z ولكن مارس = 1 في G )
 
 

خوارزمية وانج

عدل

خوارزمية وانج[10] لحساب التقويم الغريغوري بواسطة الإنسان هي (يجب طرح الصيغة بمقدار 1 إذا كان m يساوي 1 أو 2 إذا كانت السنة سنة كبيسة)  أين

  •   هو الرقم الأخير من السنة (الواحدات)
  •   هو الرقم الثاني والأخير من السنة (العشرات)
  •   هو القرن المعطى بـ  
  •   هو يوم الشهر (1 إلى 31)
  •   هو الشهر (يناير=1,...,ديسمبر=12)
  •   هو يوم من أيام الأسبوع (0=الأحد,...,6=السبت)
  •   هي دالة الأيام الخالية (إزاحة الشهر) بالقيم المدرجة في الجدول التالي
m  
1 1 A day
3 5 m + 2
5 7
7 9
9 3 m + 1
11 12
2 12 m + 3
4 2 m − 2
6 4
8 6
10 8
12 10

يمكن استخلاص خوارزمية للتقويم اليولياني من الخوارزمية أعلاه     يوم القيامة.

m  
1 3 C day
3 7 m + 4
5 9
7 11
9 5 m − 4
11 7
2 0 m − 2
4 4 m
6 6
8 8
10 10
12 12

خوارزميات أخرى

عدل

طريقة شفيردتفيجر

عدل

في الطريقة الجدولية جزئيًا التي وضعها شفيردتفيجر يتم تقسيم السنة إلى القرن والسنة المكونة من رقمين داخل القرن. والنهج يعتمد على الشهر. بالنسبة إلى m ≥ 3،

  لذلك فإن g تقع بين 0 و99. بالنسبة إلى m = 1,2

  صيغة يوم الأسبوع هي[6]   حيث يتم اختيار معامل التناسب الإيجابي.[6] يتم الحصول على قيمة e من الجدول التالي:

m 1 2 3 4 5 6 7 8 9 10 11 12
e 0 3 2 5 0 3 5 1 4 6 2 4

يتم الحصول على قيمة f من الجدول التالي والذي يعتمد على التقويم. وبالنسبة للتقويم الغريغوري[6]

c mod 4 0 1 2 3
f 0 5 3 1

بالنسبة للتقويم اليولياني[6]

c mod 7 0 1 2 3 4 5 6
f 5 4 3 2 1 0 6

طريقة لويس كارول

عدل

قام تشارلز لوتويدج دودجسون ( لويس كارول ) بوضع طريقة تشبه اللغز ولكنها جدولية جزئيًا في استخدام نفس أرقام الفهرس للأشهر كما في "الجدول الكامل: التقويمات اليوليانية والغريغورية" أعلاه. وهو يسرد نفس التعديلات الثلاثة للأشهر الثلاثة الأولى من السنوات غير الكبيسة، وسبعة تعديلات أعلى للأشهر الأخيرة، ويقدم تعليمات غامضة للعثور على الباقي، ويجب تحديد تعديلاته للقرون باستخدام صيغ مماثلة لتلك المستخدمة في جدول القرون. على الرغم من تأكيده صراحةً على أن طريقته تعمل أيضًا مع تواريخ الطراز القديم فقد أعاد إنتاج مثاله أدناه لتحديد أن "1676 فبراير 23" هو يوم الأربعاء فقط ويعمل على التقويم اليولياني الذي يبدأ العام في يناير 1، بدلا من مارس 25 كما في التقويم اليولياني "النمط القديم".

الخوارزمية:[11]

خذ التاريخ المحدد في الـ4 أجزاء أي عدد القرون وعدد السنوات الماضية والشهر ويوم الشهر.

احسب الـ 4 عناصر الآتية وإضافة كل منها -عند العثور عليها- إلى إجمالي العناصر السابقة. وعندما يتجاوز أحد العناصر أو الإجمالي 7 تتم القسمة على 7، واحتفظ بالباقي فقط.

لعنصر القرن: لـ " الطراز القديم " (الذي انتهى في عام 2008) (سبتمبر 1752) اطرح من 18. بالنسبة لـل " الأسلوب الجديد " (الذي بدأ في عام 14 سبتمبر 1752) نقسم على 4 ونأخذ المتبقي [الفائض] من 3 ونضرب الباقي في 2.

عنصر السنة: أضف معًا عدد العشرات والباقي وعدد الـ 4 في الفائض.

عنصر الشهر: إذا بدأ أو انتهى بحرف متحرك اطرح الرقم الذي يدل على مكانه في السنة من 10. وهذا بالإضافة إلى عدد أيامه فيعطي العنصر للشهر التالي. العنصر لشهر يناير هو "0"، ولشهر فبراير أو مارس "3"، ولشهر ديسمبر "12".

بند اليوم: يجب تصحيح الإجمالي الذي تم التوصل إليه بهذه الطريقة، عن طريق طرح "1" (إضافة 7 أولاً إذا كان الإجمالي "0")، أما إذا كان التاريخ هو يناير أو فبراير في سنة كبيسة، مع تذكر أن كل عام قابل للقسمة على 4 هو سنة كبيسة، باستثناء سنوات القرون فقط، وفي "النمط الجديد" عندما لا يكون عدد القرون قابلاً للقسمة بهذه الطريقة (على سبيل المثال 1800).

النتيجة النهائية تعطي يوم الأسبوع "0" يعني الأحد، "1" يعني الاثنين وهكذا.

أمثلة:[11]

1783 سبتمبر 18

17 مقسومًا على 4 يترك "1"، 1 من 3 يعطي "2"، مرتين 2 يعطي "4". 83 هو 6 دزينات و11 مما يعطي 17، بالإضافة إلى 2 يعطي 19 أي (القسمة على 7) "5". المجموع 9 أي "2" العنصر الخاص بشهر أغسطس هو "8 من 10" أي "2"، لذلك بالنسبة لشهر سبتمبر يكون "2 زائد 31" أي "5" المجموع 7 أي "0" والذي يخرج. 18 يعطي "4". الجواب "الخميس".

1676 فبراير 23

16 من 18 يعطي "2" 76 هو 6 دزينات و 4 مما يعطي 10، زائد 1 يعطي 11 أي "4". المجموع "6" العنصر لشهر فبراير هو "3". المجموع 9 أي "2" 23 يعطي "2". مجموع "4" تصحيح للسنة الكبيسة يعطي "3". الجواب "الأربعاء".

سيتم إعطاء التواريخ قبل عام 1752 في إنجلترا بالأسلوب القديم مع 25 شهر مارس هو أول أيام العام الجديد. ومع ذلك فإن طريقة كارول تفترض 1 يناير هو اليوم الأول من السنة وبالتالي فشل في الوصول إلى الإجابة الصحيحة وهي "الجمعة".

ولو لاحظ أن 1676 23 فبراير (مع 25 (مارس كيوم رأس السنة الجديدة) هو في الواقع 1677 23 فبراير (مع 1 ولكن إذا كان من المفترض أن يكون أول يناير هو رأس السنة الجديدة، فإنه كان سيأخذ في الاعتبار اختلاف أرقام السنوات -تمامًا كما يختلف تاريخ ميلاد جورج واشنطن- بين التقويمين. ثم تسفر طريقته عن:

1677 (مصحح) 23 فبراير

16 من 18 يعطي "2" 77 هو 6 دزينات و 5 مما يعطي 11، زائد 1 يعطي 12 أي "5". المجموع "7" العنصر لشهر فبراير هو "3". المجموع 10 أي "3" 23 يعطي "2". المجموع "5". الجواب "الجمعة".

ومن الجدير بالذكر أن أولئك الذين أعادوا نشر طريقة كارول فشلوا في الإشارة إلى خطئه، وأبرزهم مارتن جاردنر.[12]

في عام 1752 تخلت الإمبراطورية البريطانية عن استخدام التقويم الجولياني القديم واعتمدت التقويم الغريغوري، والذي أصبح التقويم القياسي اليوم في معظم بلدان العالم. لمزيد من المعلومات راجع تواريخ الطراز القديم والطراز الجديد.

الأساليب في برمجة الكمبيوتر

عدل

كيث

عدل

في تعبيرات لغة السي أدناه -y و m و d هي على التوالي- متغيرات عددية صحيحة تمثل السنة (على سبيل المثال 1988) والشهر (1-12) ويوم الشهر (1-31).

(d+=m<3 ? y-- : y-2,23*m/9+d+4+y/4-y/100+y/400) % 7

في عام 1990 نشر مايكل كيث وتوم كرافر التعبير السابق الذي يسعى إلى تقليل عدد ضغطات المفاتيح اللازمة لإدخال وظيفة مستقلة لتحويل التاريخ الميلادي إلى يوم رقمي من أيام الأسبوع.[13] ويعود 0 = الأحد و1 = الاثنين وهكذا. ويستخدم هذا التعبير مكون شهر أقل تعقيدًا من خوارزمية زيلر.

وبعد فترة وجيزة قام هانز لاكمان بتبسيط خوارزميتهم لتسهيل الاستخدام على الأجهزة ذات المواصفات المنخفضة. وبما أن طريقته مصممة في الأصل للآلات الحاسبة ذات الوظائف الأربع، فإنها تحتاج إلى عدد أقل من إدخالات لوحة المفاتيح من خلال الحد من نطاقها إما إلى الفترة من 1905 إلى 2099 ميلادية، أو إلى التواريخ الجوليانية التاريخية. وقد تم تعديله لاحقًا لتحويل أي تاريخ ميلادي -حتى على العداد-. وفي الأجهزة التي تعتمد على موتورولا 68000 هناك حاجة أقل أيضًا إلى سجلات المعالج أو التعليمات البرمجية التشغيلية هذا اعتمادًا على هدف التصميم المقصود.[14]

أساليب ساكاموتو

عدل

تم تجسيد السلف الجدولي لخوارزمية توندرينغ في دالة كي آند أر. سي التالية.[15] مع بعض التغييرات البسيطة تم تكييفها للغات البرمجة عالية المستوى الأخرى مثل إيه بيه أل2 .[16] وتم نشره بواسطة توموهيكو ساكاموتو على مجموعة أخبار يوسنت كامب.لانج.سي في عام 1992 وهو دقيق لأي تاريخ ميلادي.[17][18]

dayofweek(y, m, d)	/* 1 <= m <= 12, y > 1752 (in the U.K.) */
{
  static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
  if ( m < 3 )
  {
    y -= 1;
  }
  return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

يعود الـ 0 = الأحد والـ1 = الاثنين وهكذا. كما نشر ساكاموتو في نفس الوقت نسخة أكثر غموضًا:

dow(m,d,y) { y -= m<3; return (y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d) % 7; }

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

(ومرة أخرى تشبه خوارزمية توندرينغ في بنيتها تطابق زيلر وشفرة كيث القصيرة، فيما عدا أن المكون المتعلق بالشهر هو 31*m/12. وتقع خوارزمية ساكاموتو في مكان ما بين خوارزمية غاوسي المتباينة وخوارزمية شفيردتفيغر كما ويبدو أنه غير مدرك لشكل التعبير.)

طريقة جاوس في ماتلاب

عدل
% example date input
y1 = 2022;
m1 = 1;
d1 = 1;

month_offset = [0 3 3 6 1 4 6 2 5 0 3 5]؛ % common year

% offset if y1 leap year
if mod(y1,4)==0 && mod(y1,100)==0 && mod(y1,400)==0
   month_offset=[0 3 4 0 2 5 0 3 6 1 4 6]؛ % leap year
end

% Gregor
weekday_gregor = rem( d1+month_offset(m1) + 5*rem(y1-1,4) + 4*rem(y1-1,100) + 6*rem(y1-1,400),7)

% Julian
weekday_julian = rem(6+5*rem(y1-1,4) + 3*(y1-1),7)

0: الأحد 1: الإثنين .. 6: السبت

طريقة جاوس للتقويم الغريغوري في بايثون

عدل
from numpy import remainder as rem

def is_leap_year(year: int) -> bool:
    """ Determine whether a year is a leap year. """
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
    
def day_of_week(y: int, m: int, d: int) ->str:
    ''' return day of week of given date as string,
    using Gauss's algorithm to find it '''
    if is_leap_year(y):
        month_offset = (0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6)[m - 1]
    else:
        month_offset = (0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5)[m - 1]        
    y -= 1
    wd = int(rem(d + month_offset + 5 * rem(y, 4) + 4 * rem(y, 100) \
             + 6 * rem(y, 400) , 7))
    
    return ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')[wd]

انظر أيضا

عدل

المراجع

عدل

ملحوظات

عدل
  1. ^ لتوضيح ذلك بالتفصيل من المفيد تصور تقويم يصور شهرًا يبدأ يوم الأحد، أي الأول من الشهر هو يوم أحد). العد التنازلي لسبعة أيام يقودنا إلى اليوم الثامن، وهو أيضًا يوم أحد. وبالعد للأمام لعشرة أيام أخرى، نصل إلى اليوم الثامن عشر، وهو يوم الأربعاء. إذا بدأنا بدلاً من ذلك يوم الأربعاء الرابع (بعد ثلاثة أيام من الأحد الأول)، وقمنا بالعد للأمام سبعة أيام حتى الأربعاء الحادي عشر (ثلاثة أيام بعد الأحد الثامن)، ثم عدنا للأمام سبعة أيام أخرى، فسوف ينتهي بنا الأمر إلى يوم الأربعاء الموافق 18 — مرة أخرى —  بعد ثلاثة أيام من يوم الأحد الخامس عشر، والذي يقع بالضبط بعد أسبوعين (يومي أحد) بعد يوم الأحد الأول.
  2. ^ الأرقام الموجودة في العمود الأول هي أرقام أولية، إذ لم يتم اختراع التقويم الغريغوري حتى عام 1582. انظر الملاحظة الموجودة أسفل الجدول.
  3. ^ سيظهر أيضًا القرن اليولياني الذي يبدأ في العام الأول قبل الميلاد على هذا السطر من الجدول (على يسار 700) ولكن لا توجد مساحة لإدراجه.

الاستشهادات

عدل
  1. ^ ا ب Brothers، Hardin؛ Rawson، Tom؛ Conn، Rex C.؛ Paul، Matthias R.؛ Dye، Charles E.؛ Georgiev، Luchezar I. (27 فبراير 2002). 4DOS 8.00 online help.
  2. ^ "HP Prime - Portal: Firmware update" (بالألمانية). Moravia Education. 15 May 2015. Archived from the original on 2016-11-05. Retrieved 2015-08-28.
  3. ^ Paul, Matthias R. (30 Jul 1997). NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. Release 157 (بالألمانية) (3rd ed.). Archived from the original on 2016-11-04. Retrieved 2014-08-06. (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger MPDOSTIP.ZIP collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the NWDOSTIP.TXT file.)
  4. ^ Richards، E. G. (1999). Mapping Time: The Calendar and Its History. دار نشر جامعة أكسفورد. ISBN:978-0-19-850413-9.
  5. ^ ا ب Gauss، Carl F. (1981). "Den Wochentag des 1. Januar eines Jahres zu finden. Gueldene Zahl. Epakte. Ostergrenze.". Werke. herausgegeben von der Koeniglichen Gesellschaft der Wissenschaften zu Goettingen (ط. 2nd). Hildesheim: Georg Olms Verlag. ص. 206–207. ISBN:978-3-48704643-3.
  6. ^ ا ب ج د ه و Schwerdtfeger، Berndt E. (7 مايو 2010). "Gauss' calendar formula for the day of the week" (PDF) (ط. 1.4.26). اطلع عليه بتاريخ 2012-12-23.
  7. ^ Kraitchik، Maurice (1942). "Chapter 5: The calendar". Mathematical recreations (ط. 2nd revised [Dover]). Mineola: Dover Publications. ص. 109–116. ISBN:978-0-48645358-3.
  8. ^ Rosen, Kenneth H. (2011). Elementary Number Theory and Its Applications (بالإنجليزية). Addison Wesley. pp. 134–137. ISBN:978-0321500311.
  9. ^ Stockton، J. R. (19 مارس 2010). "The Calendrical Works of Rektor Chr. Zeller: The Day-of-Week and Easter Formulae". Merlyn. مؤرشف من الأصل في 2013-07-29. اطلع عليه بتاريخ 2012-12-19.
  10. ^ Wang، Xiang-Sheng (مارس 2015). "Calculating the day of the week: null-days algorithm" (PDF). Recreational Mathematics Magazine. ع. 3. ص. 5. مؤرشف من الأصل (PDF) في 2024-12-05.
  11. ^ ا ب Dodgson, C.L. (لويس كارول). (1887). "To find the day of the week for any given date". Nature, 31 March 1887. Reprinted in Mapping Time, pp. 299-301.
  12. ^ Martin Gardner. (1996). The Universe in a Handkerchief: Lewis Carroll's Mathematical Recreations, Games, Puzzles, and Word Plays, pages 24-26. Springer-Verlag.
  13. ^ Michael Keith; Tom Craver. (1990). The ultimate perpetual calendar? Journal of Recreational Mathematics, 22:4, pp.280-282.
  14. ^ The 4-function Calculator; The Assembly of Motorola 68000 Orphans; The Abacus. gopher://sdf.org/1/users/retroburrowers/TemporalRetrology
  15. ^ "Day-of-week algorithm NEEDED!" news:1993Apr20.075917.16920@sm.sony.co.jp
  16. ^ APL2 IDIOMS workspace: Date and Time Algorithms, line 15. ftp://ftp.software.ibm.com/ps/products/apl2/info/APL2IDIOMS.pdf[وصلة مكسورة] (2002)
  17. ^ "Date -> Day of week conversion". Google newsgroups:comp.lang.c. ديسمبر 1992. اطلع عليه بتاريخ 2020-06-21.
  18. ^ "DOW algorithm". Google newsgroups:comp.lang.c. 1994. اطلع عليه بتاريخ 2020-06-21.

روابط خارجية

عدل