أجهزة الكمبيوتر شبابيك إنترنت

كم يوما في شهر مايو. تحديد عدد الأيام في الشهر ببرنامج Microsoft Excel. حساب عدد الأيام بين التواريخ

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

لذا فإن المهمة

بشكل رسمي بعبارة أخرى ، نحتاج إلى الحصول على دالة f (x) التي من شأنها أن تعطي قائمة القيم التالية (والتي ، بالمناسبة ، وجدت في مكان ما على الإنترنت ، ولم أستنتج باستخدام قواعد الذاكرة):

وتجدر الإشارة إلى أننا لا نتلقى سوى رقم الشهر ، أي: نحن لا نحسب السنوات الكبيسة ، و و (2) = 28.

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

ماذا سنستخدم

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

  • تقسيم صحيح، أو "التقسيم والتقريب". سوف أمثلها كتقسيم معتاد: أ / ب - بمعنى a / b⌋. على سبيل المثال ، 5/3 = 1.
  • أخذ باقي modulo... سأشير إلى التقسيم التقليدي مع الباقي: أ٪ ب = أ - (أ / ب) * ب. على سبيل المثال ، 5٪ 3 = 2.

لديهم نفس الأولوية ويتركون الترابطية.

الأساسيات ، أو القاعدة مع استثناءات كثيرة

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

f₁ (x) = 30 + x٪ 2


بداية سعيدة! تجاهل شهر فبراير ، والذي من الواضح أنه سيتعين علينا اتباع بعض الحيل ، فلنكن سعداء لأننا تمكنا من ضبط الوظيفة في النصف الأول من العام. وبعد ذلك ، بدءًا من أغسطس ، يجب تغيير التكافؤ إلى عكس ذلك. يمكن القيام بذلك عن طريق الاستبدال ×٪ 2في الإصدار الأول من الصيغة على (x + 1)٪ 2:

f₂ (x) = 30 + (x + 1)٪ 2


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

قناع

نحتاج إلى +1 في المقسوم ليتم "تنشيطها" فقط عندما تصل الوسيطة إلى قيم أكبر من 8 ، أي نحن بحاجة لتطبيق بعض القناع. في هذه الحالة ، لا يمكن أن تتجاوز قيم الوسيطة 12. وبالتالي ، فإن القسمة الصحيحة للوسيطة على 8 مثالية بالنسبة لنا:


بالضبط كما نحتاجه. دعنا نستخدم هذا الاستنتاج:

f₃ (x) = 30 + (x + x / 8)٪ 2


رائع! كل شيء على ما يرام ، باستثناء فبراير. كيف غير متوقع.

شهر فبراير

في جميع الأشهر ، هناك 30 أو 31 يومًا ، في فبراير - 28 (تذكر ، لا نعتبر السنوات الكبيسة).

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

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

ملحوظة: هذا المنشور هو ترجمة للمقال cmcenroe.me/2014/12/05/days-in-month-formula.html ( الجزء الأول) وكذلك إضافة المؤلف إليها ( الجزء الثاني). لا يجب أن تأخذ المادة على محمل الجد ، بل كإحماء للعقل ، لا يتطلب أكثر من معرفة مدرسية بالحساب وليس لها تطبيق عملي. نتمنى لكم قراءة سعيدة للجميع!

الجزء الأول

مقدمة

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

إضفاء الطابع الرسمي بعبارة أخرى ، من الضروري إيجاد الوظيفة Fمثل هذه القيمة و (خ)لكل شهر x، ممثلة برقم بين 1 و 12 ، يساوي عدد الأيام في ذلك الشهر. جدول قيم الوسيطة والدالة:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 28 31 30 31 30 31 31 30 31 30 31

إذا كانت لديك رغبة في تجربتها بنفسك قبل قراءة الحل ، فقد حان الوقت الآن. إذا كنت تفضل أن ترى إجابة جاهزة على الفور ، فابحث تحت الجناح.

إجابة


فيما يلي خطواتي لإيجاد حل.

جهاز رياضي

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

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

ما تبقى من الانقسامإنه عامل يجد باقي القسمة. تستخدم العديد من لغات البرمجة هذا الرمز % لكنني سأستخدم إنشاءات النموذج ، على سبيل المثال:

لاحظ أن باقي القسمة له نفس أولوية القسمة.

أساسيات

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

نحصل على الجدول ، يتم تمييز القيم الصحيحة بالخط العريض:
x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 30 31 30 31 30 31 30 31 30 31 30

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

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 30 31 30 31 30 31 30 31 30 31 30 31

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

تراكب القناع

يتطلب هذا وظيفة متعددة التعريف ، ولكن - نظرًا لأنها بدت مملة بالنسبة لي - فكرت في حل آخر ، باستخدام جزء من الدالة على فترة زمنية ، وآخر في آخر.
أعتقد أنه من الأسهل العثور على تعبير يساوي 1 في تطبيق واحد و 0 في البقية. الطريقة التي ، بضرب وسيطة في تعبير ، نستثنيها من الصيغة خارج نطاق تطبيقها ، أسميتها "إخفاء" ، لأن هذا السلوك يشبه نوعًا من قناع البت.
لتطبيق هذه الطريقة في الجزء الأخير من الدالة ، تحتاج إلى إيجاد تعبير يساوي 1 من أجل ، و - نظرًا لأن قيم الوسيطة دائمًا أقل من 16 - فإن القسمة الصحيحة على 8 مناسبة لهذا.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

الآن ، باستخدام هذا القناع ، باستخدام التعبير بدلاً من 1 في المقسوم ، يمكننا استبدال ترتيب الحصول على 0 و 1 من الصيغة بالعكس:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 30 31 30 31 30 31 31 30 31 30 31

يوريكا! كل شيء على ما يرام ، باستثناء فبراير. يا للمفاجئة.

شهر فبراير

يحتوي أي شهر على 30 أو 31 يومًا ، باستثناء شهر فبراير مع 28 (السنة الكبيسة خارج نطاق هذه المشكلة). في الوقت الحالي ، وفقًا للصيغة التي لدينا ، لها 30 يومًا ، لذلك سيكون من الجيد طرح التعبير الذي يساوي 2 في.
أفضل ما يمكنني التوصل إليه هو هذا ، الذي يضع قناعًا على جميع الأشهر بعد فبراير:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 نموذج x 0 0 2 2 2 2 2 2 2 2 2 2

بتغيير الثابت الأساسي إلى 28 ، بإضافة 2 إلى باقي الأشهر ، نحصل على الصيغة:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 29 28 31 30 31 30 31 31 30 31 30 31

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

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 28 31 30 31 30 31 31 30 31 30 31

خاتمة

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

الوظيفة f (x) (إرجاع 28 + (x + Math.floor (x / 8))٪ 2 + 2٪ x + 2 * Math.floor (1 / x) ؛)

الجزء الثاني

مقدمة

في الجزء الأول ، تم الحصول على صيغة قصيرة وحتى أنيقة بعض الشيء ، تتمثل مزاياها الرئيسية في بساطة الجهاز الرياضي ، وغياب الفروع والتعبيرات الشرطية ، والإيجاز. تشمل العيوب - بصرف النظر عن حقيقة أنك لن تستخدمها في مشروعك - عدم التحقق من لزوجة جوز الهند والسنوات غير الكبيسة.
لذلك ، حددت لنفسي مهمة إنشاء وظيفة Fمثل هذه القيمة و (س ، ص)لكل شهر xممثلة برقم من 1 إلى 12 وسنة ذأكبر من 0 يساوي عدد الأيام في الشهر xفي السنة ذ.
بالنسبة إلى الصبر ، هناك إجابة جاهزة تحت جناح السيارة ، بينما يُطلب من الباقين أن يتبعوني.

إجابة

باقي القسم: عصريو ⌊⌋

من أجل الوضوح البصري ، دعنا نتفق على أنه في بعض الصيغ يتم استبدال عامل القسمة مع الباقي بأقواس سفلية ، حيث بدا لي ضروريًا:

سنة كبيسة

في سنة كبيسة ، يتم تقديم يوم تقويمي إضافي: 29 فبراير. كما تعلم ، السنة الكبيسة هي مضاعف 4 وليس مضاعف 100 أو مضاعف 400. لنكتب التعبير المطابق لهذه العبارة:

لتحويل هذا التعبير إلى تعبير جبري ، من الضروري تطبيق حقنة النموذج على نتيجة التعبير:

وهو ما سيتيح لك الحصول على 1 عند القسمة بدون باقي و 0 عند القسمة على الباقي ، لاستخدامه في الصيغة لتحديد عدد الأيام في الشهر.

كوظيفة ز "يمكنك استخدام 1 ناقص الباقي من أجل:

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ز "(خ) ما لا نهاية 1 0 0 0 0 0 0 0 0 0 0 0 0 0

من السهل ملاحظة أنه من خلال زيادة المقسوم والمقسوم عليه بمقدار 1 ، نحصل على الصيغة الصحيحة لـ:
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ز "(خ) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

وهكذا نكتب التعبير على النحو التالي:


ونكتب التعبير على النحو التالي:

بتطبيق هذا النهج ، نحصل على الوظيفة التالية ز (ص)، تكون قيمتها 1 إذا كانت السنة سنة كبيسة ، أو 0 بخلاف ذلك:

ذ 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
ز (ص) 0 0 1 0 0 0 1 0 0 0 1
ذ 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
ز (ص) 1 0 0 0 1 0 0 0 1 0 0

السنوات الكبيسة بالخط العريض.

أذكرك أنه في إطار الاتفاقية المقبولة ، يمكن تصوير المشغل للحصول على ما تبقى من التقسيم على أنه عصريو ⌊⌋.

تراكب القناع

في الصيغة ، الجزء عبارة عن تعديل يضيف يومين إلى يناير. إذا أزلنا العامل 2 واستبدلنا 1 بـ 2 في البسط ، فستضيف هذه الصيغة يومين إلى يناير ويوم واحد إلى فبراير ، مما يمنحنا مفتاح إضافة يوم في سنة كبيسة. من أجل الوضوح ، نستخدم القيمة الوسيطة في الصيغة ز (ص)و كما ذنستخدم الأعوام 2000 (كبيسة) و 2001 (غير كبيسة):

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ ، 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x ، 2001) 30 28 31 30 31 30 31 31 30 31 30 30

القيم لجميع الأشهر باستثناء شهر يناير من السنة غير الكبيسة صحيحة.

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


أو:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ ، 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x ، 2001) 31 28 31 30 31 30 31 31 30 31 30 30

استنتاج

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

الدالة f (x، y) (إرجاع 28 + ((x + Math.floor (x / 8))٪ 2) + 2٪ x + Math.floor ((1 + (1 - (y٪ 4 + 2)٪ (y٪ 4 + 1)) * ((y٪ 100 + 2)٪ (y٪ 100 + 1)) + (1 - (y٪ 400 + 2)٪ (y٪ 400 + 1))) / x) + طابق رياضيات (1 / x) - طابق رياضيات (((1 - (y٪ 4 + 2)٪ (y٪ 4 + 1)) * ((y٪ 100 + 2)٪ (y٪ 100 + 1 )) + (1 - (y٪ 400 + 2)٪ (y٪ 400 + 1))) / x)؛)
المثال في C # idea.com/fANutz.

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

التحديث. 1:
ترجمة بديلة للجزء الأول في

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

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

الطريقة الأولى: مزيج من مشغلي DAY و EONMONTH

عظم بطريقة بسيطةلحل هذه المشكلة هو مزيج من المشغلين يومو من الأشهر.

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

صيغة المشغل يومالتالي:

DAY (date_num_format)

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

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

EON MONTHS (تاريخ_البدء ، عدد_أشهر)

المشغل أو العامل "تاريخ البدء"يحتوي على تاريخ بدء العد التنازلي ، أو مرجع إلى الخلية التي يقع فيها.

المشغل أو العامل "عدد الأشهر"يشير إلى عدد الأشهر المطلوب حسابها من تاريخ معين.

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


اتخذت صيغتنا العامة الشكل التالي:

DAY (EONTHS (B3،0))

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

الطريقة الثانية: التحديد التلقائي لعدد الأيام

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

DAY (E-MONTHS (TODAY () ؛ 0))

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

الطريقة الثالثة: حساب عدد الأيام لاستخدامها في الصيغ المعقدة

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

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

اليوم (E-MONTHS (TODAY () ؛ 0)) - DAY (TODAY ())

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

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

DAY (E-MONTHS (TODAY () ؛ 0))

لكن في الجزء الثاني ، يتم طرح رقم اليوم من هذا المؤشر:

يوما بعد يوم أو من يوم إلى آخر ())

وبالتالي ، عند إجراء هذا الحساب ، تكون صيغة حساب عدد الأيام جزءًا من صيغة أكثر تعقيدًا.

الطريقة الرابعة: الصيغة البديلة

لكن ، للأسف ، إصدارات البرنامج التي تسبق Excel 2007 لا تحتوي على المشغل من الأشهر... ماذا عن هؤلاء المستخدمين الذين يستخدمون الإصدارات القديمة من التطبيق؟ بالنسبة لهم ، توجد هذه الفرصة من خلال صيغة أخرى ، أكبر من تلك الموضحة أعلاه. دعونا نرى كيفية حساب عدد الأيام في الشهر لتاريخ تقويم معين باستخدام هذا الخيار.

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

    النافذة التي تفتح لها ثلاثة حقول. في الميدان "يوم"يمكنك إدخال رقم على الفور "1"... سيكون هذا هو نفس الإجراء في أي موقف. ولكن يجب التعامل مع المجالين الآخرين بدقة.

    ضع المؤشر في الحقل "عام"... بعد ذلك ، ننتقل إلى اختيار المشغلين من خلال المثلث المألوف.

  4. الكل في نفس الفئة معالجات الوظيفةحدد الاسم "عام"وانقر على الزر "نعم".
  5. تبدأ نافذة وسيطات عامل التشغيل عام... يحدد السنة بالتاريخ المحدد. في مربع نافذة واحدة "التاريخ بتنسيق رقمي"نحدد رابطًا للخلية التي تحتوي على التاريخ الأصلي الذي تريد تحديد عدد الأيام فيه. بعد ذلك ، لا تتسرع في النقر فوق الزر "نعم"، وانقر على الاسم "تاريخ"على شريط الصيغة.
  6. ثم نعود إلى نافذة الحجج مرة أخرى. تاريخ... ضع المؤشر في الحقل "شهر"وانتقل إلى اختيار الوظائف.
  7. الخامس معالج الوظيفةاضغط على الاسم "شهر"وانقر على الزر "نعم".
  8. تبدأ نافذة وسيطات الوظيفة شهر... مهامه تشبه المشغل السابق ، فقط يعرض قيمة رقم الشهر. في الحقل الوحيد من هذه النافذة ، قم بتعيين نفس المرجع إلى الرقم الأصلي. ثم ، في شريط الصيغة ، انقر فوق الاسم "يوم".
  9. العودة إلى نافذة الحجج يوم... هنا علينا القيام بضربة واحدة صغيرة. في الحقل الوحيد من النافذة ، والذي يحتوي بالفعل على بيانات ، أضف التعبير إلى نهاية الصيغة "-1"بدون علامات اقتباس ، وكذلك وضع "+1" بعد عامل التشغيل شهر... بعد ذلك ، انقر فوق الزر "نعم".
  10. كما ترى ، تعرض الخلية المحددة مسبقًا عدد الأيام في الشهر الذي ينتمي إليه الرقم المحدد. تبدو الصيغة العامة كما يلي:

    DAY (DATE (YEAR (D3) ؛ MONTH (D3) +1 ؛ 1) -1)

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

كما ترى ، هناك عدة خيارات لمعرفة عدد الأيام في الشهر في Excel. يعتمد أي منها على الهدف النهائي للمستخدم ، وكذلك على إصدار البرنامج الذي يستخدمه.

ملحوظة: هذا المنشور هو ترجمة للمقال cmcenroe.me/2014/12/05/days-in-month-formula.html ( الجزء الأول) وكذلك إضافة المؤلف إليها ( الجزء الثاني). لا يجب أن تأخذ المادة على محمل الجد ، بل كإحماء للعقل ، لا يتطلب أكثر من معرفة مدرسية بالحساب وليس لها تطبيق عملي. نتمنى لكم قراءة سعيدة للجميع!

الجزء الأول

مقدمة

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

إضفاء الطابع الرسمي بعبارة أخرى ، من الضروري إيجاد الوظيفة Fمثل هذه القيمة و (خ)لكل شهر x، ممثلة برقم بين 1 و 12 ، يساوي عدد الأيام في ذلك الشهر. جدول قيم الوسيطة والدالة:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 28 31 30 31 30 31 31 30 31 30 31

إذا كانت لديك رغبة في تجربتها بنفسك قبل قراءة الحل ، فقد حان الوقت الآن. إذا كنت تفضل أن ترى إجابة جاهزة على الفور ، فابحث تحت الجناح.

إجابة


فيما يلي خطواتي لإيجاد حل.

جهاز رياضي

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

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

ما تبقى من الانقسامإنه عامل يجد باقي القسمة. تستخدم العديد من لغات البرمجة هذا الرمز % لكنني سأستخدم إنشاءات النموذج ، على سبيل المثال:

لاحظ أن باقي القسمة له نفس أولوية القسمة.

أساسيات

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

نحصل على الجدول ، يتم تمييز القيم الصحيحة بالخط العريض:
x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 30 31 30 31 30 31 30 31 30 31 30

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

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 30 31 30 31 30 31 30 31 30 31 30 31

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

تراكب القناع

يتطلب هذا وظيفة متعددة التعريف ، ولكن - نظرًا لأنها بدت مملة بالنسبة لي - فكرت في حل آخر ، باستخدام جزء من الدالة على فترة زمنية ، وآخر في آخر.
أعتقد أنه من الأسهل العثور على تعبير يساوي 1 في تطبيق واحد و 0 في البقية. الطريقة التي ، بضرب وسيطة في تعبير ، نستثنيها من الصيغة خارج نطاق تطبيقها ، أسميتها "إخفاء" ، لأن هذا السلوك يشبه نوعًا من قناع البت.
لتطبيق هذه الطريقة في الجزء الأخير من الدالة ، تحتاج إلى إيجاد تعبير يساوي 1 من أجل ، و - نظرًا لأن قيم الوسيطة دائمًا أقل من 16 - فإن القسمة الصحيحة على 8 مناسبة لهذا.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

الآن ، باستخدام هذا القناع ، باستخدام التعبير بدلاً من 1 في المقسوم ، يمكننا استبدال ترتيب الحصول على 0 و 1 من الصيغة بالعكس:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 30 31 30 31 30 31 31 30 31 30 31

يوريكا! كل شيء على ما يرام ، باستثناء فبراير. يا للمفاجئة.

شهر فبراير

يحتوي أي شهر على 30 أو 31 يومًا ، باستثناء شهر فبراير مع 28 (السنة الكبيسة خارج نطاق هذه المشكلة). في الوقت الحالي ، وفقًا للصيغة التي لدينا ، لها 30 يومًا ، لذلك سيكون من الجيد طرح التعبير الذي يساوي 2 في.
أفضل ما يمكنني التوصل إليه هو هذا ، الذي يضع قناعًا على جميع الأشهر بعد فبراير:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 نموذج x 0 0 2 2 2 2 2 2 2 2 2 2

بتغيير الثابت الأساسي إلى 28 ، بإضافة 2 إلى باقي الأشهر ، نحصل على الصيغة:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 29 28 31 30 31 30 31 31 30 31 30 31

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

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ) 31 28 31 30 31 30 31 31 30 31 30 31

خاتمة

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

الوظيفة f (x) (إرجاع 28 + (x + Math.floor (x / 8))٪ 2 + 2٪ x + 2 * Math.floor (1 / x) ؛)

الجزء الثاني

مقدمة

في الجزء الأول ، تم الحصول على صيغة قصيرة وحتى أنيقة بعض الشيء ، تتمثل مزاياها الرئيسية في بساطة الجهاز الرياضي ، وغياب الفروع والتعبيرات الشرطية ، والإيجاز. تشمل العيوب - بصرف النظر عن حقيقة أنك لن تستخدمها في مشروعك - عدم التحقق من لزوجة جوز الهند والسنوات غير الكبيسة.
لذلك ، حددت لنفسي مهمة إنشاء وظيفة Fمثل هذه القيمة و (س ، ص)لكل شهر xممثلة برقم من 1 إلى 12 وسنة ذأكبر من 0 يساوي عدد الأيام في الشهر xفي السنة ذ.
بالنسبة إلى الصبر ، هناك إجابة جاهزة تحت جناح السيارة ، بينما يُطلب من الباقين أن يتبعوني.

إجابة

باقي القسم: عصريو ⌊⌋

من أجل الوضوح البصري ، دعنا نتفق على أنه في بعض الصيغ يتم استبدال عامل القسمة مع الباقي بأقواس سفلية ، حيث بدا لي ضروريًا:

سنة كبيسة

في سنة كبيسة ، يتم تقديم يوم تقويمي إضافي: 29 فبراير. كما تعلم ، السنة الكبيسة هي مضاعف 4 وليس مضاعف 100 أو مضاعف 400. لنكتب التعبير المطابق لهذه العبارة:

لتحويل هذا التعبير إلى تعبير جبري ، من الضروري تطبيق حقنة النموذج على نتيجة التعبير:

وهو ما سيتيح لك الحصول على 1 عند القسمة بدون باقي و 0 عند القسمة على الباقي ، لاستخدامه في الصيغة لتحديد عدد الأيام في الشهر.

كوظيفة ز "يمكنك استخدام 1 ناقص الباقي من أجل:

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ز "(خ) ما لا نهاية 1 0 0 0 0 0 0 0 0 0 0 0 0 0

من السهل ملاحظة أنه من خلال زيادة المقسوم والمقسوم عليه بمقدار 1 ، نحصل على الصيغة الصحيحة لـ:
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ز "(خ) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

وهكذا نكتب التعبير على النحو التالي:


ونكتب التعبير على النحو التالي:

بتطبيق هذا النهج ، نحصل على الوظيفة التالية ز (ص)، تكون قيمتها 1 إذا كانت السنة سنة كبيسة ، أو 0 بخلاف ذلك:

ذ 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
ز (ص) 0 0 1 0 0 0 1 0 0 0 1
ذ 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
ز (ص) 1 0 0 0 1 0 0 0 1 0 0

السنوات الكبيسة بالخط العريض.

أذكرك أنه في إطار الاتفاقية المقبولة ، يمكن تصوير المشغل للحصول على ما تبقى من التقسيم على أنه عصريو ⌊⌋.

تراكب القناع

في الصيغة ، الجزء عبارة عن تعديل يضيف يومين إلى يناير. إذا أزلنا العامل 2 واستبدلنا 1 بـ 2 في البسط ، فستضيف هذه الصيغة يومين إلى يناير ويوم واحد إلى فبراير ، مما يمنحنا مفتاح إضافة يوم في سنة كبيسة. من أجل الوضوح ، نستخدم القيمة الوسيطة في الصيغة ز (ص)و كما ذنستخدم الأعوام 2000 (كبيسة) و 2001 (غير كبيسة):

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ ، 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x ، 2001) 30 28 31 30 31 30 31 31 30 31 30 30

القيم لجميع الأشهر باستثناء شهر يناير من السنة غير الكبيسة صحيحة.

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


أو:

x 1 2 3 4 5 6 7 8 9 10 11 12
و (خ ، 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f (x ، 2001) 31 28 31 30 31 30 31 31 30 31 30 30

استنتاج

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

الدالة f (x، y) (إرجاع 28 + ((x + Math.floor (x / 8))٪ 2) + 2٪ x + Math.floor ((1 + (1 - (y٪ 4 + 2)٪ (y٪ 4 + 1)) * ((y٪ 100 + 2)٪ (y٪ 100 + 1)) + (1 - (y٪ 400 + 2)٪ (y٪ 400 + 1))) / x) + طابق رياضيات (1 / x) - طابق رياضيات (((1 - (y٪ 4 + 2)٪ (y٪ 4 + 1)) * ((y٪ 100 + 2)٪ (y٪ 100 + 1 )) + (1 - (y٪ 400 + 2)٪ (y٪ 400 + 1))) / x)؛)
المثال في C # idea.com/fANutz.

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

التحديث. 1:
ترجمة بديلة للجزء الأول في

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

أضف أيامًا حتى تاريخه

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

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

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

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

العطل

يمكن للآلة الحاسبة حساب وإضافة وطرح أيام التقويم وأيام العمل. الإجازات الرسمية خارج أوقات العمل هي:

  • 1،2،3،4،5،6،8 يناير - عطلة رأس السنة الجديدة
  • 7 يناير - عيد الميلاد الأرثوذكسي
  • 23 فبراير - يوم المدافع عن الوطن
  • 8 مارس - اليوم العالمي للمرأة
  • 1 مايو - الربيع وعيد العمال
  • 9 مايو - يوم النصر
  • 12 يونيو - يوم روسيا
  • 4 نوفمبر - يوم الوحدة الوطنية

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

عند حساب الأيام ، تأخذ الآلة الحاسبة في الاعتبار كلاً من الإجازات الرسمية وجميع التحويلات.