fonksiyonu nasıl kullanabilirim.?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

fonksiyonu nasıl kullanabilirim.?

Mesaj gönderen y.kulac »

s.a.
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;
edit1 deki tarih ile sistem tarihini yukarıdaki fonsiyona göre çıkarıp yıl, ay, gün olarak farkını bulmak ve bunu label1.caption 'a aktarmak istiyorum. neler önerirsiniz.

iyi çalışmalar.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Kod: Tümünü seç

Label1.Caption := TarihFarki(StrToDate(Edit1.text), Now);
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

teşekkür ederim.

ben hep şu şekilde denemiştim.

Kod: Tümünü seç

Label1.Caption := TarihFarki(StrToDate(Edit1.text) - Now);
demek doğrusu sizin verdiğiniz şekilde.[/code]
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- O fonksiyonu yazdığımda Delphi 5 ve öncesi kullanıyordum. DateUtils unit'i yoktu...

- Şimdi işler kolaylaştı...
Uses'a DateUtils ekle ve aşağıdaki gibi kullan...

Kod: Tümünü seç

Label1.Caption := IntToStr( DaysBetween(Tarih1, Tarih2) );
dediğinde ters de olsa düz de olsa farkı veriyor...
Resim
Resim ....Resim
Cevapla