tarih hesabı?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
tarih hesabı?
s.a.
arama kısmından tarih ile ilgili dökümanları buldum ve okudum. ama yapmak istediğimi beceremedim.
dbedit1 deki tarihi bu günün tarihinden çıkaracak ve edit1 e yılı edit2 ye ayı edit3 e ise günü yazacak.
ben bu günün tarinden dbedit1 de yazılan tarihi çıkarıp 365 e böldüm ama değişik bir rakam elde ettim.
neler önerirsiniz. iyi çalışmalar
arama kısmından tarih ile ilgili dökümanları buldum ve okudum. ama yapmak istediğimi beceremedim.
dbedit1 deki tarihi bu günün tarihinden çıkaracak ve edit1 e yılı edit2 ye ayı edit3 e ise günü yazacak.
ben bu günün tarinden dbedit1 de yazılan tarihi çıkarıp 365 e böldüm ama değişik bir rakam elde ettim.
neler önerirsiniz. iyi çalışmalar
-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
Forumda bu konuda bir cok mesaj mevcut arama yaparsanız faydalanırsınız.
viewtopic.php?t=5470&highlight=iki+tarih
viewtopic.php?t=4290&highlight=param+tarih
iyi bayramlar
viewtopic.php?t=5470&highlight=iki+tarih
viewtopic.php?t=4290&highlight=param+tarih
iyi bayramlar
Re: tarih hesabı?
y.kulac yazdı:s.a.
arama kısmından tarih ile ilgili dökümanları buldum ve okudum. ama yapmak istediğimi beceremedim.
dbedit1 deki tarihi bu günün tarihinden çıkaracak ve edit1 e yılı edit2 ye ayı edit3 e ise günü yazacak.
ben bu günün tarinden dbedit1 de yazılan tarihi çıkarıp 365 e böldüm ama değişik bir rakam elde ettim.
neler önerirsiniz. iyi çalışmalar
Kod: Tümünü seç
var
yil, ay, gun, saat, dakika, saniye, salise : Word;
begin
DecodeDateTime ( Now, yil, ay, gun, saat, dakika, saniye, salise);
Merhaba...
@abdulkadir
- Verdiği linklerde doğru sonuçlar malesef yok. Merak edip kontrol ettim. İlk linkteki @NeverFear'in veriği kod; @y.kulac'ın istediğine yakın bir işlem gerçekleştiriyor ama aşağıya o koddan yansıttığım örnek kadarından da görülen o ki bence hatalı...
- Hepimiz biliyoruz ki bir yıl içerisinde, ay'daki gün sayısı 4 farklı sayıdır. 28, 29, 30, 31... Bu durumun önemi, 30.01.2004 ile 02.02.2004 gibi ardışık aylarda ön plana gelir...
- Temrin : Aşağıdaki işlemleri lütfen kağıt üzerinde deneyiniz...
- Yani
30.03.2004 -> 01.04.2004 arasında 2 gün'e karşılık 1 sonucu,
28.02.2004 -> 01.03.2004 arasında 2 gün'e karşılık 3 sonucu,
28.02.2005 -> 01.03.2005 arasında 1 gün'e karşılık 3 sonucu
vermesiyle hatalı işlem gerçekleştirmektedir...
- Tasarlayacağınız fonksiyonda bunlara dikkat ediniz... Vakit bulduğumda size kendi fonksiyonumu sunarım...
@abdulkadir
- Verdiği linklerde doğru sonuçlar malesef yok. Merak edip kontrol ettim. İlk linkteki @NeverFear'in veriği kod; @y.kulac'ın istediğine yakın bir işlem gerçekleştiriyor ama aşağıya o koddan yansıttığım örnek kadarından da görülen o ki bence hatalı...

- Hatası ay farkını alırken kullandığı sabiti 30 gün kabul etmesinden.@NeverFear yazdı: ...
YIL:=YIL1 - YIL2;
AY:=AY1 - AY2;
if AY<0 then
begin
AY:=AY+12;
YIL:=YIL-1;
end;
GUN:=GUN1 - GUN2;
if GUN<0 then
begin
GUN:=GUN+30;
AY:=AY-1;
end;
if AY<0 then
begin
AY:=AY+12;
YIL:=YIL-1;
end;
...
- Hepimiz biliyoruz ki bir yıl içerisinde, ay'daki gün sayısı 4 farklı sayıdır. 28, 29, 30, 31... Bu durumun önemi, 30.01.2004 ile 02.02.2004 gibi ardışık aylarda ön plana gelir...

- Temrin : Aşağıdaki işlemleri lütfen kağıt üzerinde deneyiniz...
- Yani



vermesiyle hatalı işlem gerçekleştirmektedir...
- Tasarlayacağınız fonksiyonda bunlara dikkat ediniz... Vakit bulduğumda size kendi fonksiyonumu sunarım...

-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:
arkadaşlar teşekkür ederim. delphiyi sizlerin sayesinde öğrenmeye
çalışıyoruz. malesef bu işin eğitimini görmedim. ingilizcem de yok. ben bu işi boş zamanlarımı
değerlendirmek için yapıyorum. ilk önce sorunu halletmeye çalışıyorum. ben bir sorunun
üzerinde en az 3-4 saat kafa yormadan zaten foruma sormuyorum. arama da yapıyorum.
ama yapamıyorum. neyse yukarıdaki bilgilere göre tekraf uğraşayım. hepinize iyi çalışmalar.
bu arada kurban bayramınız mübarek olsun.
çalışıyoruz. malesef bu işin eğitimini görmedim. ingilizcem de yok. ben bu işi boş zamanlarımı
değerlendirmek için yapıyorum. ilk önce sorunu halletmeye çalışıyorum. ben bir sorunun
üzerinde en az 3-4 saat kafa yormadan zaten foruma sormuyorum. arama da yapıyorum.
ama yapamıyorum. neyse yukarıdaki bilgilere göre tekraf uğraşayım. hepinize iyi çalışmalar.
bu arada kurban bayramınız mübarek olsun.
@abdulkadir hocam sana da iyi bayramlar..
- O kodu yazan sen değilsin ki, suçlar tarzda bişi yok, yazmak doğru olmazdı da zaten
- Tersine referans verdiğin için teşekkür borçluyuz, keza bu link gözden ırak kalmış, gün yüzüne çıkmasına vesile oldun...
Desteğinin devamını dilerim... 
- Çalışmalarında başarılar...
- O kodu yazan sen değilsin ki, suçlar tarzda bişi yok, yazmak doğru olmazdı da zaten

- Tersine referans verdiğin için teşekkür borçluyuz, keza bu link gözden ırak kalmış, gün yüzüne çıkmasına vesile oldun...


- Çalışmalarında başarılar...

-
- Kıdemli Üye
- Mesajlar: 489
- Kayıt: 13 Eyl 2003 09:10
- Konum: istanbul
- İletişim:


- Herkesin bayramını kutlarım...

Not: IsLeapYear fonksiyonu için Uses'a DateUtils eklemeyi unutmayınız...
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;