اذهب الي المحتوي
أوفيسنا

دالة الفرق بين تاريخين datediff


الردود الموصى بها

لحساب الفارق الزمني بين تار

Datediff(“m”;[date1];[date2]

)

قبل كل شيء يجب ملاحظة ما يلي :-

1- أن الدالة السابقة تحسب الفارق بين تاريخين

2- عدم وجود مسافة عند كتابة الدالة وملاحظة وضع الشهر بين علامتين تنصيص"" ووضع التاريخ الأول والتاريخ الثاني داخل أقواس [ ]

3- الفاصلة تكون فاصلة منقوطة ..

4- يرجى ملاحظة ما سبق ....

أولا : بداية نتكلم عن الوسيطة الاولى ... وهي في مثالنا السابق الشهر "m"

Datediff(“m”;[date1];[date2])

تعيد الفرق بعدد الاشهر

مثال 1

Datediff(“m”;[2005/05/09];[2007/070/09])

يكون الفرق بين التاريخين 26 شهر لأننا طلبنا الفرق بالأشهــــر وليس الايام أو السنوات

********************************************************************

Datediff(“d”;[date1];[date2])

تعيد الفرق بعدد الايام

مثال 2

Datediff(“d”;[2005/05/09];[2007/070/09])

تعيد الناتج 791 يوم ( لأننا طلبنا الناتج يكون بالايـــــــــــام عن طريق الوسيط D

**************************************************

Datediff(“YYYY”;[date1];[date2])

تعيد الفرق بعدد السنوات

مثال 3

Datediff(“y”;[2005/05/09];[2007/070/09])

تعيد الناتج 2 سنة= سنة 7- سنة 5 = عدد السنة الفارق 2سنة لأننا طلبنا الفرق بالسنوات

*********************************************************************

Datediff(“Y”;[date1];[date2])

تعيد الفرق بعدد الايام ...يرجى ....ملاحظة أن كتبنا سنة وليس يوم ..

تعالوا ننظر الى هذه الدالة ......

Datediff(“M”;[date1];[date2])/12

المفروض أنها تعيد الفارق بعدد الأشهر لأننا استعملنا الوسيطة (M) يعني شهر

لكن الصحيح انها تعيد عدد السنوات لانها اشترطنا أن الناتج يقسم على 12 شهر

وبالتالي فان النتيجة يكون بعدد السنوات لا بعدد الاشهر مع اننا استعملنا الوسطية شهر

لاحظ أن وضعنا /12 خارج الأقواس وليس داخل الاقسام ...... تعيد الفارق بالسنوات + كسور

********************************************************************************

******

يرجى ملاحظة الجدول لمعرفة الفروقات

الإعدادالوصف

yyyy السنة

الأسبوع ww

الأسبوع

h الساعة

n الدقيقة

s الثانية

وفيما عدا ذلك لا يعتد بذلك

مثلا لو استعملنا أحد الوسائط التالية mm-mmm-mmm-dd-ddd-dddd-YY-YYY

لا تعيد الدالة أي قيمة وترجع خطأ.............!!!

********************************************************************************

******

ملاحظات :-

1- عند عكس التاريخ ووضع التاريخ الصغير في النهاية ووضع التاريخ الكبير في البداية

تعطي نفس النتيجة السابقة لكن (-) يعني بالسالب ....

********************************************************************************

******

وأيضــــــــــــــــــا تستطيـــــــــــــــع

Datediff(“d”;[date1]; NOW())

Datediff(“d”;[NOW()];[date2])

تستطيع استخدام تاريخ الــــيــــــــوم كما في المثال السابق

مثال على ذلك..استخدام الدالة لانتهاء صلاحية الجواز ... أو لمعرفة عدد أيام العمل ولمعرفة ( عمر الشخص ) ولمعرفة عدد سنوات العمل في الوزارة ... وهكذا .....

********************************************************************************

***

Datediff(“d”;[date1]; #2007/10/25#)

Datediff(“d”;# 2007/10/25#;[date2])

تستطيع استخدام هذه الدالة لمقارنة بين تاريخ ثابت لا يتغير وبين تاريخ تضعه في حقل

مثال على ذلك لاستخدام الدالة لمعرفة الفروقات بين تاريخ ثابت وتاريخ متحرك أو تاريخ متتغير

لكن في هذه الحالة لا تستخدم أقواس [ ] ولكن استخدم # # لوضع التاريخ الثابت

********************************************************************************

*******

لكن ماذا تفعل هذه الدالات : صراحة لا علم بها ... أتمنى أحد من ألأخوة يفيدنا بها ....

Datediff(“d”;1;[date2])

Datediff(“M”;2;[date2])

Datediff(“Y”;5;[date2])

Datediff(“d”;5;NOW()

Datediff(“Y”;4;NOW())

***********************

ربط الدالة بمربع رســــــــــــــــــالة

تستطيع ربط( الدالة بمربع رسالة )

مثلا تستطيع عمل دالــــة لطرح التاريخ الحالي من تاريخ انتهاء جواز

واذا كان الناتج > 29 يوم

يظهر مربع رسالة ((( انتـــبـــــه .... جواز سفــر قارب على الانتهـــــــــــــــــــــــاء )))؟؟؟!!!

لذلك نطلب من أحد الأخوة .... التطوع لعمل هذه الفكــــرة .. لنــــرى النتيجـــة ....

***************************************************************************

قد يطرح بعض الاخوة سؤال ما هو الهدف من الحصول على هذه النواتج المختلفة أحيانا بالايام واحيانا بالاشهر واحيانا بالسنوات ..؟؟!!

1- نحتاج احيانا الى الحصول الى العدد الناتج بالسنوات ( مثال لذلك معرفة عمر الشخص ) فلا يعقل أن يسألك شخص ما عن عمرك فتقول له 20 سنة و5 شهور 12و يوم وانما الجواب المعتاد 20 سنة ..

2- نحتاج احيانا الى الحصول الى العدد الناتج بالايام ( لحاجات كثيرة منها مثلا اخبارنا ، بانتهاء الجواز أو البطاقة أو رخصة القيادة قبل بـ 29 يوما ولا نحتاج الأشهر او السنوات ..

3- أحيانا نحتاج الى العدد الناتج يكون بالسنوات والاشهر والايام .. مثلا ( لحساب نهاية خدمات موظف : نحتاج معرفة ايام العمل للموظف ( سنوات – اشهر- أيام ) وهكذا .....

********************************************************************************

اخطـــــــــــــــــــاء هذه الدالة القابلـــة للـحــــــــــــــــل :-

1-عند مقارنة 31 ديسمبر من هذه السنة بـ 1 يناير من السنة التالية، تقوم الدالة DateDiff للسنة ("yyyy") بإرجاع 1 على الرغم من مرور يوم واحد فقط.

مثال استعمل # بدلا من الاقواس .....

Datediff(“YYYY”;[2007/12/31];[2008/01/01])

لاحظ أن الفرق بين هذه التاريخين هو يوم.. لكن النتيجة .. حسب الدالة السابقة 1 سنة .... وهذه خطأ فادح ..؟؟؟؟ جرب الدالة وانظر أين الخطـــأ.....

2- عدم تقريب الارقـــــام .. فمثلا لو كان عمر شخص (25 سنة و11شهر و29 سنة ) لا يتم تقريب هذه الارقام ....اذا كان الوسيط ( سنة )

3- احيانا نحتاج لمعرفة عدد أيام بين حقلين تاريخين هما ( تاريخ التعيين ) ( وتاريخ انتهاء التعيين ) ونريد معرفة عدد أيام العمل لهذا الموظف لكن .. ( بعد حذف ايام الخميس والجمعة – لا يوجد عمل بهذين العمل ) ... فما هو الحل في هذه الحالــــة ...؟؟؟؟!!!!!!!!!!!!

4- لنقص أيام أو سنين من تاريخ افتراضي فما هو الحل ...

يعني تاريخ 15/2/2007 ننقص منه 5 أيام

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

5- هل هناك طريقة ليكون الناتج على شكل تنسيــق بمعني .. هل تسطيع هذه الدالة

Datediff(“y”;[2005/05/01];[2007/070/09])

فيكون الناتج 8 يوم /2 شهر / 2سنة

الجواب .. نعم هناك دالة موجودة في المنتدى .. لكن لا أذكرها موقعها بالتحديـــد ....

********************************************************************************

*************

وأخيــرا يجب قراءة هذه الملاحظات التي أحضرتها من تعليمات البرنامج (مكتوبة باللون الزهري):-

لحساب عدد الأيام بين date1 و date2، يمكنك إما استخدام "يوم من السنة" ("y") أو "اليوم" ("d"). عندما تكون interval عبارة عن "يوم من الأسبوع" ("w")، تقوم الدالة DateDiff بإرجاع عدد الأسابيع بين التاريخين. إذا وقع date1 في يوم الاثنين، تقوم الدالة DateDiff بحساب عدد أيام الاثنين حتى date2. يتم حساب date2 وليس date1. إذا كان interval عبارة عن "أسبوع" ("ww")، تقوم الدالة DateDiff مع ذلك بإرجاع عدد أسابيع التقويم بين التاريخين. يتم حساب أيام الأحد بين date1 و date2. تقوم الدالة DateDiff بحساب date2 إذا وقع في يوم الأحد؛ ولكن لا يتم حساب date1، حتى ولو وقع في يوم الأحد.

إذا كان date1 أو date2 عبارة عن تاريخ حرفي، تصبح السنة المحددة جزءً دائماً من هذا التاريخ. ولكن إذا كان date1 أو date2 داخل علامتي اقتباس (" ")، وقمت بحذف السنة، يتم إدراج السنة الحالية في التعليمات البرمجية في كل مرة يتم حساب تعبير date1 أو date2. وهذا يسمح بكتابة التعليمات البرمجية التي يمكن استخدامها في سنوات مختلفة.

ملاحظة بالنسبة للتاريخين date1 و date2، إذا كان إعداد الخاصية التقويم هو الميلادي، يجب أن يكون التاريخ ميلادياً. إذا كان التقويم هجرياً، يجب أن يكون التاريخ هجرياً.************************************************************************

في النهاية

1-لي طلب صغير من جميع من قرأ هذه السطور .. بالتكرم باعطائنا مثال ( عملي ) يعني برنامج صغير عن الدالة السابقة حتى تعم الفائدة

مثلا من يتكرم باعطائنا رسالة توضح عدد الايام المتبقية لنهاية سنة 2007م

2- يرجى التكرم من الاخوة اضافة أي معلومة جديدة عن الدالة حتى تكون مرجع لباقي الاعضاء ....

وفي الختام ....

1- الفضل لله تعالى أولا وأخيرا على هذه المعلومات المتواضعة .. ثم الفضل لمنتديات ( الفريق العربي للبرمجة ومنتدى أوفيســــنا ) ولجميع الاعضاء والمشرفين في هذين المنتدين

2- قد يكون الترتيب لهذا الكلام غير منطقي لأنني كتبتها على عجالة ..

رابط هذا التعليق
شارك

  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information