أخر الأخبار

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


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




اليوم سنرى درس مهم جدا و هو استعمال الدوال الخاصة بالتاريخ في الدلفي هذه المرة سنرى الفرق بين تاريخين 
بصيغة متتالية يوم شهر سنة اي كم يوجد بين تاريخين من يوم شهر سنة و هذه الدوال مهمة جدا حيث تساعد مثلا على حساب العمر  بين تاريخين او حساب عدد ايام العطل في تسيير الموظفين طبعا نستطيع ان نضع هذا في قواعد البيانات لنعود اليها كمعطيات 
خاصة بالموظفين مثلا
المهم طبعا نستعمل الدلفي نفتح مشروع جديد و نضع المكونات الخاصة بــ Dynamique Skin Form 
 و نغير الإعدادات طبعا الخاصة بالخط ووضعية المكونات على الفورم كما في الصورة

(spSkinDateEdit    (2

(3)    spSkinEdit
  
spSkinButton


الأن وبعد ما قمنا بوضع المكونات التي نحتاجها في التطبيق نبدأ في برمجتها اولا ندهب الى  تعريف المتغيرات في البداية و نعرف

حيث تستعمل لتعريف كل دوال التواريخ في الدلفي و تعتبر مهمة جدا و الا سيظهر خطاء في البرنامج    DateUtils,





اولا يجب علينا ان نعرف المتغيرات الآتية تحت  implementation

type
  TJJMMAA = record
              JJ,
              MM,
              AA : word;
            end;

ثم نضع الدالة الخاصة بالتاريخ الآتية

function DatetoJJMMAA(const CDate1, CDate2 : TDate) : TJJMMAA;

var
  Date1,
  Date2,
  WDate : TDate;

begin
  if CompareDate(CDate1, CDate2) > 0 then begin  
    Date1 := CDate2;
    Date2 := CDate1;
  end
  else 
begin
    Date1 := CDate1;
    Date2 := CDate2;
  end;
  with result do begin
    AA := 0;                                 
    repeat                                  
      inc(AA);                             
      WDate := Date1;                       
      Date1 := incyear(Date1);              
    until comparedate(Date1, Date2) > 0;    
    dec(AA);                                
    Date1 := WDate;                          

    MM := 0;                               
    repeat
      inc(MM);
      WDate := Date1;
      Date1 := incmonth(Date1);
    until comparedate(Date1, Date2) > 0;
    dec(MM);
    Date1 := WDate;

    JJ := 0;                               
    repeat
      inc(JJ);
      Date1 := incday(Date1);
    until comparedate(Date1, Date2) > 0;
    dec(JJ);
  end;
end;
 لقد اسمينا الدالة الفرق بين التواريخ من نوع يوم شهر سنة و بالتالي نحتاج الى تاريخين  ثم نقوم بعملية مقرنة فإذا كان التاريخ الثاني  اكبر من التاريخ الأول فاننا سنقلب النتيجة مهما كانت الوضعية
 ثم نقوم بوضع حلقة تكرارية تبدا بعداد السنوات تضيف له في كل مرة  سنة 
وذلك حين انتهاء عدد الشهور 12 و هكذا حتى نحسب الفرق في الأشهر ثم في الأيام

الأن نذهب الى الزر الخاص بحساب الفرق  و نضع الأكواد الخاصة بالحساب 

procedure TForm1.spSkinButton1Click(Sender: TObject);
var
  texte0 : string;
   texte1 : string;
   texte2 : string;
    Delta0 : TJJMMAA;
 begin
  Delta0 := DatetoJJMMAA(spSkinDateEdit1.date, spSkinDateEdit2.date);

  texte0 := '';
  with Delta0 do begin
    case JJ of
      0 : texte0 := '0';
      1 : texte0 := '1 ';
    else
      texte0 := format('%2d ', [JJ]);
    end;
    if MM >= 0 then
      if texte1 = '' then
        texte1 := format('%2d ', [MM])
      else
        texte1 := format('%2d  ', [MM]) + texte1;
    if (AA > 0) and
       (Texte2 <> '0') then
      Texte2 := '' + Texte2;
    case AA of
      0 :texte2 := '0' ;
      1 : texte2 := '1' + Texte2;
    else
      texte2 := format('%2d ', [AA]) + Texte2;
    end;


 spSkinEdit1.Text := texte0;
 spSkinEdit2.Text := texte1;
 spSkinEdit3.Text := texte2;
 end;
end;
F9 بعد ذلك نقوم بتنفيذ البرنامج عن طريق

سنجرب تاريخين و الصورة خير دليل على ظهور الفرق بينهما 


الأن رغم تغييرنا للتاريخين من حيث القيمة فإن البرنامج يعمل بكفاءة



نتمنى ان يكون الشرح وافيا تقبلوا تحياتنا و الى درس قادم ان شاء الله






تعليقات



حجم الخط
+
16
-
تباعد السطور
+
2
-