İki tarih arasındaki fark

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
aydogan46
Üye
Mesajlar: 115
Kayıt: 11 Haz 2003 02:59
Konum: ankara
İletişim:

İki tarih arasındaki fark

Mesaj gönderen aydogan46 »

herkese Merhabalar;
veritabanım Ms SQL Server,
edit1:=bugunun tarihi
edit2.text:=işe giriş tarihi
edit3.text:=kaç yıl kaç ay kaç gün çalışmış
verilen iki tarih arasındaki yıl, ay,gün olarak nasıl alabilirim.? herkese şimdiden teşekkürler
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

Kod: Tümünü seç


  fark := tarih1-tarih2;   //tarihler double olarak tutulduğundan aradaki farkı alalım
  gun  := fark mod 30;  //her ayın 30 gün olduğu kabul edildi.
  ay   := (fark div 30) mod 12;
  yil  := (fark div 30) div 12;

iyi çalışmalar.
aydogan46
Üye
Mesajlar: 115
Kayıt: 11 Haz 2003 02:59
Konum: ankara
İletişim:

Mesaj gönderen aydogan46 »

hocam ilgine teşekkür ederim de. benim sorunum şurda edit1 deki tarihten edit2 deki tarihi çıkarttıramıyorum. tip hatası falan veriyo. acaba bu konuda yardımcı olabilir misiniz?
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

Kod: Tümünü seç

var
   fark: Double;  
begin
  fark := tarih1.date-tarih2.date;
şeklinde olur.Kolay gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
hesaplamaya başlamadan önce

Kod: Tümünü seç

baslama :=strtodate(edit1.text);
şeklinde stringi tarihe dönüştürmeniz lazım.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Ancestor
Üye
Mesajlar: 188
Kayıt: 27 Ara 2004 06:12
Konum: Manisa - Kırkağaç

Mesaj gönderen Ancestor »

Kabaca şu şekilde olabilir sanırım.

Kod: Tümünü seç

  islem := trunc(strtodate(edit1)) - trunc(strtodate(edit2));
  gun  := islem mod 30;  //her ayın 30 gün olduğu kabul edildi.
  ay   := (islem div 30) mod 12;
  yil  := (islem div 30) div 12; 
aydogan46
Üye
Mesajlar: 115
Kayıt: 11 Haz 2003 02:59
Konum: ankara
İletişim:

Mesaj gönderen aydogan46 »

arkadaşlar sonuçlar ne kadar tam olarak tutmasada (01.01.2006-01.01.2000 = 6 yıl 1 ay 2 gün çıkıyo:) yardımlarınız için çok teşekkür ederim
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Arkadaşlar ayı 30 olarak aldıkları için bir yılda 5 gün 6 yılda 30 gün farkediyor. Ayrıca 2000 ve 2004'te şubat 29 çektiğinden 2 gün de ordan farkediyor.

Tabi demokraside çareler tükenmez :lol:
Aşağıdaki programcıkla istediğiniz tam 6 yıla kavuşabilirsiniz. :P

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
islem,gun,ay,yil:integer ;
artiklar:integer;
basyili,basAyi,basGunu,bitYili,bitAyi,bitGunu:word;
begin
    artiklar:=0;
     decodedate(trunc(strtodate(edit2.text)),basyili,basayi,basgunu);
     decodedate(trunc(strtodate(edit1.text)),bityili,bitayi,bitgunu);


    if isleapyear(basyili) then artiklar:=artiklar+1;

     artiklar:=artiklar+trunc((bityili-basyili)/4);



  islem := trunc(strtodate(edit1.text)) - trunc(strtodate(edit2.text));
  islem:=islem-((bityili-basyili)*5)-artiklar;




  gun  := islem mod 30;  //her ayın 30 gün olduğu kabul edildi.
  ay   := (islem div 30) mod 12;
  yil  := (islem div 30) div 12;

   label1.Caption:=inttostr(gun);
   label2.Caption:=inttostr(ay);
   label3.Caption:=inttostr(yil);

 end;

Ben tam teşekküllü olarak test etmedim. Ama sizin verdiğiniz aralıkta yani 01.01.2000 ve 01.01.2006 tarihleri arasını 0 gün 0 ay ve 6 yıl veriyor. Yani matematik dersinde yaptığımız çıkarmayı yapıyor. Artık test edip hatasını bulmak da sizden olsun. :oops:



Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
aydogan46
Üye
Mesajlar: 115
Kayıt: 11 Haz 2003 02:59
Konum: ankara
İletişim:

Mesaj gönderen aydogan46 »

hocam çok teşekkür ederim.test ettim sonuç mükemmel. ellerinize sağlık.
Cevapla