geçen yıl foruma sorduğum bir soruda iki tarih arasındaki farkı yıl, ay, gün olarak nasıl alabilirim demiştim.
mrmarman abimiz saolsun bir fonksiyon göndermişti.
ben fonksiyon kullanımında biraz zayıfım.
Kod: Tümünü seç
Function TarihFarki(Eski, Yeni:TDate) : String;
Var
eGun, eAy, eYil,
yGun, yAy, yYil : Word;
sGun, sAy, sYil : Integer;
EklenecekGun : Word;
T1, T2 : TDate;
begin
EklenecekGun := 0;
If Eski > Yeni then
begin // Tarihler yanlışlıkla ters büyüklükte girilmiş demektir...
T1 := Yeni;
T2 := Eski;
end else
begin
T1 := Eski;
T2 := Yeni;
end;
DecodeDate(T1, eYil, eAy, eGun);
DecodeDate(T2, yYil, yAy, yGun);
sGun := yGun-eGun; // Sonuç negatif olursa;
If sGun < 0 then // eski ayın gün sayısı sonuca eklenecek
// yeni ayın, ay sayısından 1 düşülecek,
// fakat, 28,29,30,31 hangisi düşülecek, ona
// karar verilecek...
begin
Case eAy of // dikkat: eski aya göre kontrol edip,
// yeni aydan eksiltme yapmalıyız...
1,3,5,7,8,10,12: // 31 çeken aylar
EklenecekGun := 31;
4,6,9,11: // 30 çeken aylar
EklenecekGun := 30;
2: // Şubat ayı 28 veya 29
If IsLeapYear(eYil) // artık yıl kontrolü
then EklenecekGun := 29
else EklenecekGun := 28;
end; // Case
Repeat // Eklendiği halde negatiflik değişmeyebilir.
// Örnek : 31.01.2005 -> 02.02.2005
Inc(sGun, EklenecekGun);
Dec(yAy);
Until sGun >= 0; // sonuç 0 veya pozitif olana kadar...
end;
sAy := yAy-eAy; // Sonuç negatif olabilir
While sAy < 0 do
begin
Inc(sAy, 12);
Dec(yYil);
end;
sYil := yYil-eYil;
Result := Format('%.4d.%.2d.%.2d',[sYil, sAy, sGun]);
end;
iyi çalışmalar.