delphi4arab منتديات دلفي للعرب
في ما يتعلق بفارق الشهور بين تاريخين - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : في ما يتعلق بفارق الشهور بين تاريخين (/showthread.php?tid=10386)



في ما يتعلق بفارق الشهور بين تاريخين - medreg - 17-08-2019

السلام عليكم ورحمة الله تعالى وبركاته
ارفع محاولتي واطلب الاطلاع عليها فيما يتعلق بكود النتيجة
هل هو صحيح ام لا
المطلوب هو اذا كان التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 31/12/2013 
النتيجة تكون 36 شهرا
اما اذا كان التاريخ الثاني يسازي 30/11/2013 فالنتيجة تكون 35 شهرا
ملاحة اذا كان هناك طيادة في الكود لا نحتاجها ارجو حذفها
وجزاكم الله عنا كل خير

[attachment=4084]


RE: في ما يتعلق بفارق الشهور بين تاريخين - medreg - 17-08-2019

اولا اعتذر
عيدكم مبارك وسعيد وكل عام وانتم والامة الاسلامية بالف خير
نسأل الله العلي القدير ان يعيده علينا بالخير والسعادة أمـــين
ملاحطة
لماذا عندما يكون التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 28/02/2011 تكون النتيجة 1 شهر واحد
مادا افعل حتى تصبح النتيجة 2 شهران بدلا من شهر انا اضفت في الكود +1 كما هو مبين في المرفق ولا اعرف ان كان منطقي ام لا
ارجو الرد بارك الله فيكم لأني بحاجة ماسة لهذا الكود
جزاكم الله عنا كل خير


RE: في ما يتعلق بفارق الشهور بين تاريخين - onexite - 18-08-2019

(17-08-2019, 06:15 PM)medreg كتب : اولا اعتذر
عيدكم مبارك وسعيد وكل عام وانتم والامة الاسلامية بالف خير
نسأل الله العلي القدير ان يعيده علينا بالخير والسعادة أمـــين
ملاحطة
لماذا عندما يكون التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 28/02/2011 تكون النتيجة 1 شهر واحد
مادا افعل حتى تصبح النتيجة 2 شهران بدلا من شهر انا اضفت في الكود +1 كما هو مبين في المرفق ولا اعرف ان كان منطقي ام لا
ارجو الرد بارك الله فيكم لأني بحاجة ماسة لهذا الكود
جزاكم الله عنا كل خير
لان 28-1 = 27 وهي اقل من 30 يوم
الفارق 01 شهر و 27 يوم


RE: في ما يتعلق بفارق الشهور بين تاريخين - merouane - 18-08-2019

(17-08-2019, 06:15 PM)medreg كتب : اولا اعتذر
عيدكم مبارك وسعيد وكل عام وانتم والامة الاسلامية بالف خير
نسأل الله العلي القدير ان يعيده علينا بالخير والسعادة أمـــين
ملاحطة
لماذا عندما يكون التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 28/02/2011 تكون النتيجة 1 شهر واحد
مادا افعل حتى تصبح النتيجة 2 شهران بدلا من شهر انا اضفت في الكود +1 كما هو مبين في المرفق ولا اعرف ان كان منطقي ام لا
ارجو الرد بارك الله فيكم لأني بحاجة ماسة لهذا الكود
جزاكم الله عنا كل خير

كما رد أخونا onexite

للزيادة، هناك إجراءات في الدلفي تمكنك من معرفة الفرق بين تاريخين (عدد الأيام، عدد الشهور، عدد السنين ....)
فيما يهمك هما: (أنقر على كل كلمة لقراءة التوثيق الرسمي)
عدد الشهور: MonthsBetween
عدد السنين: YearsBetween

وحسب ما تريده هو أن يعد الشهر الأخير ضمن الحساب لذلك هناك الإجراء MonthSpan (كذلك بخصوص حساب السنة الأخيرة YearSpan)
لذلك لا تحتاج لكل الكود الذي كتبته في برنامجك، ويصبح كالتالي:

PHP كود :
procedure TForm1.AdvSmoothButton1Click(Sender: TObject);
begin
  with DM 
Do
  begin
    Tb1
.Edit;
    Tb1.Fieldvalues['AnneeGanier'] := YearSpan(Tb1.Fieldvalues['Dt_Debut'], Tb1.Fieldvalues['Dt_Dernr']);
    Tb1.Fieldvalues['MoisGanier'] := MonthSpan (Tb1.Fieldvalues['Dt_Debut'], Tb1.Fieldvalues['Dt_Dernr']);
    Tb1.post;
  end;
end; 

ملاحظة: سيعمل الكود الجديد بشكل جيد، لكن لمن أراد أن يستعمل هاته الإجراءات يضيف الوحدة System.DateUtils في Uses


RE: في ما يتعلق بفارق الشهور بين تاريخين - medreg - 18-08-2019

بارك الله فيكم اخي مروان
هذا ما كنت اقصد 
لكن عندما وضعت نفس الكود بالنسبة لعدد الايام  ينقص منه يوم
غيرت فقط الدالة MonthSpan بـ DaySpan
يعني عندما يمون التاريخ الاول 01/01/2011 والتاريخ الثاني 28/01/2011 النتيجة التي تظهر 27 يوم
ومن المفروض النتيجة المطلوبة هي 28 يوما
جزاكم الله عنا كل خير


RE: في ما يتعلق بفارق الشهور بين تاريخين - merouane - 18-08-2019

(18-08-2019, 06:33 PM)medreg كتب : بارك الله فيكم اخي مروان
هذا ما كنت اقصد 
لكن عندما وضعت نفس الكود بالنسبة لعدد الايام  ينقص منه يوم
غيرت فقط الدالة MonthSpan بـ DaySpan
يعني عندما يمون التاريخ الاول 01/01/2011 والتاريخ الثاني 28/01/2011 النتيجة التي تظهر 27 يوم
ومن المفروض النتيجة المطلوبة هي 28 يوما
جزاكم الله عنا كل خير

DaySpan يحسب الأيام بأخذ بعين الاعتبار الساعات، التنيجة عدد كسري (أرقام بفواصل)

PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
  DaySpanV, DaySpanB: double;
begin
  DaySpanV 
:= DaySpan(strToDateTime('01/01/2019 12:00:00'),
                      strToDateTime('01/28/2019 11:30:00'));
  DaySpanB := DaysBetween(strToDateTime('01/01/2019 12:00:00'),
                          strToDateTime('01/28/2019 11:30:00'));
  Label1.Caption := 'DaySpan value : '+ floattostr(DaySpanV)+ #10
                  + 'DaysBetween value : '+ floattostr(DaySpanB);
end; 

النتيجة:
كود :
DaySpan value : 26.9791666666642 DaysBetween value : 26



RE: في ما يتعلق بفارق الشهور بين تاريخين - medreg - 19-08-2019

جزاك الله عنا كل خير لقد اكتفيت باضافة +1 في اخر السطر حتى تتم العملية واضفت دالة التقريب حتى اتخلص من الفاصلة