كيف يتم حسب التاريخ بهده الطريقه
#5
PHP كود :
procedure DayBteweenDate(DATE1, DATE2: Tdate; Memo1,Memo2: TsMemo);
var
  
F: Byte;
  
I, J, N, V: Integer;
  
Jour1, Mois1, Annee1: Word;
  
Jour2, Mois2, Annee2: Word;
  
S,MS: string;
begin
  Memo1
.Lines.Clear;
  
Memo2.Lines.Clear;
  
decodedate(DATE1, Annee1, Mois1, Jour1);
  
decodedate(DATE2, Annee2, Mois2, Jour2);
  
F := MonthsBetween(DATE1, DATE2);
  
// حساب كم يوجد من شهر بين التاريخين
  
V := (30 - Jour1) + Jour2;
  if (
V <= 29) then
    inc
(F);
  
// if sDateEdit1.date > sDateEdit2.date then sDateEdit2.DragDone();

  
for I := 0 to F do // حلقة تكرارية من صفر شهر الى النتيجة
  
begin
    
case (Mois1) of // اذا الشهر للتاريخ الاول أخذ احد القيم نفذ على حسبه
      
1, 3, 5, 7, 8, 10, 12: // اشهر التي تنتهي بـ 31
        
begin
          
if ((Annee1 = Annee2) and (Mois1 = Mois2)) then
            N 
:= Jour2
            
// اذا كان العام نفسه و الشهر نفسه فالعدد نون يساوي اليوم للتاريخ الثاني
          
else
            
N := 31; // و الا نون يساوي واحد وثلاثين
          
for J := Jour1 to N do // حلقة تكرارية من اليوم للتاريخ الاول الى نون
          
begin
            
if J = N - 1 then
              S 
:= S + intToStr(J) + ' et '
            
else
              
S := S + intToStr(J) + ','; // يضع الارقام في سلسة نصيه
          
end;
          if 
Mois1=1 then MS:= 'Jan';
          if 
Mois1=3 then MS:= 'Mar';
          if 
Mois1=5 then MS:= 'Mai';
          if 
Mois1=7 then MS:= 'Jul';
          if 
Mois1=8 then MS:= 'Aou';
          if 
Mois1=10 then MS:= 'Oct';
          if 
Mois1=12 then MS:= 'Dec';
          
Delete(S, length(S), 1); // احذف اخر مطة في السلسة النصية
          
Memo1.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
          
Memo2.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
          
// اعرض التاريخ
          
if (Mois1 = 12) then // اذا كان الشهر هو الاخير
          
begin
            Mois1 
:= 1; // حول الشهر الى جانفي
            
Annee1 := Annee1 + 1; // زد عاما على التاريخ
          
end
          
else // و الا
            
Mois1 := Mois1 + 1; // زد الشهر بواحد
          
Jour1 := 1; // و ارجع اليوم الى قيمة واحد
          
S := 'et le:'; // تفريغ قيمة السلسلة النصية للعودة الى الحلقة

        
end;
      
4, 6, 9, 11:
        
begin
          
if ((Annee1 = Annee2) and (Mois1 = Mois2)) then
            N 
:= Jour2
          
else
            
N := 30; // ياخذ نون القيمة 30
          
for J := Jour1 to N do
          
begin
            
if J = N - 1 then
              S 
:= S + intToStr(J) + ' et '
            
else
              
S := S + intToStr(J) + ',';
          
end;
          if 
Mois1=4 then MS:= 'Avr';
          if 
Mois1=6 then MS:= 'Jun';
          if 
Mois1=9 then MS:= 'Sep';
          if 
Mois1=11 then MS:= 'Nov';

          
Delete(S, length(S), 1);
          
Memo1.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
          
Memo2.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
          
Mois1 := Mois1 + 1;
          
Jour1 := 1;
          
S := 'et le:';

        
end;
      
2:
        
begin
          
if (Annee1 mod 4 = 0) then // التحقق من السنة كبيسة او لا
          
begin
            
if ((Annee1 = Annee2) and (Mois1 = Mois2)) then
              N 
:= Jour2
            
else
              
N := 29; // نون تاخذ قيمة 29
            
for J := Jour1 to N do
            
begin
              
if J = N - 1 then
                S 
:= S + intToStr(J) + ' et '
              
else
                
S := S + intToStr(J) + ',';
            
end;
            if 
Mois1=2then MS:= 'Fev';
            
Delete(S, length(S), 1);
            
Memo1.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
            
Memo2.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
            
Mois1 := Mois1 + 1;
            
Jour1 := 1;
            
S := 'et le:';

          
end
          
else
          
begin
            
if ((Annee1 = Annee2) and (Mois1 = Mois2)) then
              N 
:= Jour2
            
else
              
N := 28; // نون تاخذ قيمة 28
            
for J := Jour1 to N do
            
begin
              
if J = N - 1 then
                S 
:= S + intToStr(J) + ' et '
              
else
                
S := S + intToStr(J) + ',';
            
end;
            if 
Mois1=2then MS:= 'Fev';
            
Delete(S, length(S), 1);
            
Memo1.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
            
Memo2.Lines.Add(S + ' / ' + (MS) + ' / ' + intToStr(Annee1));
            
Mois1 := Mois1 + 1;
            
Jour1 := 1;
            
S := 'et le:';

          
end;

        
end;
    
end;
  
end;
end; 

تم العثور على الحل بارك الله فيكم
الرد


الردود في هذا الموضوع
كيف يتم حسب التاريخ بهده الطريقه - بواسطة annabil23 - 04-12-2012, 11:05 AM

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


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