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

[attachment=4084]
الرد
#2
اولا اعتذر
عيدكم مبارك وسعيد وكل عام وانتم والامة الاسلامية بالف خير
نسأل الله العلي القدير ان يعيده علينا بالخير والسعادة أمـــين
ملاحطة
لماذا عندما يكون التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 28/02/2011 تكون النتيجة 1 شهر واحد
مادا افعل حتى تصبح النتيجة 2 شهران بدلا من شهر انا اضفت في الكود +1 كما هو مبين في المرفق ولا اعرف ان كان منطقي ام لا
ارجو الرد بارك الله فيكم لأني بحاجة ماسة لهذا الكود
جزاكم الله عنا كل خير
الرد
#3
(17-08-2019, 06:15 PM)medreg كتب : اولا اعتذر
عيدكم مبارك وسعيد وكل عام وانتم والامة الاسلامية بالف خير
نسأل الله العلي القدير ان يعيده علينا بالخير والسعادة أمـــين
ملاحطة
لماذا عندما يكون التاريخ الاول يساوي 01/01/2011 والتاريخ الثاني يساوي 28/02/2011 تكون النتيجة 1 شهر واحد
مادا افعل حتى تصبح النتيجة 2 شهران بدلا من شهر انا اضفت في الكود +1 كما هو مبين في المرفق ولا اعرف ان كان منطقي ام لا
ارجو الرد بارك الله فيكم لأني بحاجة ماسة لهذا الكود
جزاكم الله عنا كل خير
لان 28-1 = 27 وهي اقل من 30 يوم
الفارق 01 شهر و 27 يوم
الرد
#4
(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
الرد
#5
بارك الله فيكم اخي مروان
هذا ما كنت اقصد 
لكن عندما وضعت نفس الكود بالنسبة لعدد الايام  ينقص منه يوم
غيرت فقط الدالة MonthSpan بـ DaySpan
يعني عندما يمون التاريخ الاول 01/01/2011 والتاريخ الثاني 28/01/2011 النتيجة التي تظهر 27 يوم
ومن المفروض النتيجة المطلوبة هي 28 يوما
جزاكم الله عنا كل خير
الرد
#6
(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
الرد
#7
جزاك الله عنا كل خير لقد اكتفيت باضافة +1 في اخر السطر حتى تتم العملية واضفت دالة التقريب حتى اتخلص من الفاصلة
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم