04-12-2012, 11:05 AM
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;
تم العثور على الحل بارك الله فيكم

