İki Tarih arasındaki gün farkı nasıl hesaplanır?

Başlatan papylon, 12 Nisan 2010, 00:53:10

papylon

İki tarih arasında ki (Yıl, Ay, Hafta, Gün) ve(Gün farkı) farkını, matematiksel olarak kağıt üzerinde hesaplamanın formülü nedir? Nasıl yapılır, bu konuda bilgisi olan var mı?

Örnek vermek gerekirse;
28.08.2010 – 05.02.2039 arasında (28 yıl; 5 ay; 1 hafta; 1 gün) fark var ve toplam gün farkı (10388 gün)

Bilen arkadaşlar yardımcı olursa çok sevinirim.  Kaç gündür hafif hafif sıyırmak üzereyim...

camby

kağıt üzerinde mi? yazılım mantığı ile kolay gibi..

ileri tarihten eski tarihi çıkartarak değil de , Eski tarihi ileriye doğru arttırarak daha kolay sayılabilir , 28 sayacını bir arttıracaz her arttırma sırasında ayın kaç günlük olduğunu kontrol edicez 30dan 31'ye geçişte 1 yap gibi... 5'e kadar gidecek , kaç gün oldu 8   . Daha sonra ayı arttıracaz , ay en son 09'da kalmıştı 09'dan 02'ye kadar arttırıp, tabi yine her seferinde ay kaç günlük diye kontrol edicez . Birkaç işlem ile şimdiye kadar elde edilen 5 ay 1 hafta 1 gün , yada 8 + 30 +31 +30 +31 +30 gün.

geriye kaldı yıl hesabı ,  05.02.2011 den 05.02.2039 'a net 28 yıl. sonuç 28 yıl 5 ay 1 hafta 1 gün. gün hesabı olarak (365*28 ) + 8 + 30 + 31 + 30 + 31 + 30 + 8 (8kez de nisan 29 çekmiş)

papylon

@camby cevap için teşekkür ederim fakat benim istediğim şey bu işin formülü. Bu işin formülü anlaşılırsa yazılım mantığı da bir o kadar iyi olur.

camby

yukarıdaki yazdıklarımı ab.cd.20ef  - xy-zq-20km şeklinde ifade edersek formül çıkmış oluyor:)

varsa daha iyi yöntemi olan buyursun kapışalım:)

papylon

Bu arada sanırım farkında olmadan yaptın ama yukarıdaki hesabında yanlışlık var.

05.02.2011 den 05.02.2039 'a tam tamına 28 yıl yapar ve Şubat ayı da bu yıllar arasında 8 değil 7 kere 29 çeker.
Aman haa.. kapışmak için falan yazmadım.. :)

Şaka bir yana seninkine benzer bir hesabı iki tarih arasında kalan gün farkını bulmak için kullanıyorum fakat anlamaya çalıştığım bu işin matematiksel bir formülü var mıdır?

senoleker

Formül olmaz. Çünkü aya bağlı eklenecek sayı var.
Ancak mantıksal förmüller yazılarak formülize edilebilir ama istediğin bu değil sanırım.
tarihi y=yıl, d=gün, m= ay olarak alırsak ve bunu güne çevirmek istersek:
dd=int(y/4)+365*y+d diye başlarız ama ay'ı eklemek için ne yazık ki "algoritma" gerek.
Bunu da bir lookup tablodan yapabilirsin.
Örneğin
dd=dd+ (0,31,59,90,120,151,181,212,243,273,304,334) (ay'a göre)
en son da eğer 2. ay ve artık yıl düzeltmesi:
if (int(y/4)=y/4) and m<3 then dd=dd-1
her iki tarih için de dd değeri bulunup farkı alınırsa aradaki gün sayısını bulabilirsin.
Ayrıca bu dd'yi 7' ye bölüp kalanını alırsan gün adını da bulabilirsin (Pazartesi, salı gibi)

orhanc

belirli bir dil kullanacak mısın ?

http://5dspace-time.org/Calendar/Algorithm.html
i'm doing nothing... Giddy Up  http://www.drorhan.com

papylon

Projeyi 15 gün kadar önce bitirdim.

İnternetten sonuca ulaşamayınca kendi oluşturduğum mantıkla doğru sonuca ulaştım.
Kulağımı belki biraz tersten tutsam da oldu. Daha ileride tarih hesaplarıyla ilgili başka projeler olursa gösterdiğiniz yoldan yaparım.

@seneloker ve @orhanc Verdiğiniz bilgiler çok faydalı olmuş Teşekkürler.

peko

" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

papylon

#9
Elbette
Aşağıdaki linkten C kaynak kodlarını ve ISIS simülasyonunu indirebilirsiniz.
Elimden geldiğince açıklamalarını da yazmaya çalıştım.



Programın en başındaki

// Şimdiki Tarih                                                       gün/ay/yıl
struct _Date{unsigned char gun, ay, yil;} Date={22, 5, 10};        // 22/05/2010

// Gelecek Tarih                                                              gün/ay/yıl
struct _Gelecek{unsigned char gun, ay, yil;} Gelecek={14, 5, 14}; // 14/05/2014

Yapılarının tarih değerlerini değiştirip farklı tarih değerleri girerek kontrol edebilirsiniz.

TARİH FARKI HESAPLAMA

Umarım faydalı olur...

papylon

Güle güle kullan FxDev.

Ayrıca hata bildirimin için teşekkürler. Tekrar kontrol edeceğim.

papylon

@FxDev senin düzelttiğin şekilde de hatalı oluyor.

Programın o kısmını düzelttim ve ayrıca programda başka bir hata daha buldum ve programın yapısında değişiklikler yaptım. Sorun bu sefer tamamen çözüldü.

Sanırım gönül rahatlığıyla kullanabilirsiniz.  :D

Yukarıdaki Link'e yeniden upload ettim.

papylon

@FxDev senin düzelttiğin haliyle, uzun vadeli tarihlerde artık yıla denk geldiğinde 1 gün eksik yazılıyordu, onun mantığını değiştirdim ve orada problem kalmadı.

Onun haricinde gelecek tarihin ay'ı şimdiki tarihin ayından büyük olduğunda her ay için 30 gün eksik çıkıyordu programa buranın hesabını katmayı unutmuşum. :)  Böyle bir hata senin gözüne çarpmasaydı diğer hatayı da bulamayacaktım. Ta ki böyle bir tarihe denk gelene kadar. Dolayısıyla programda ki switch, case kısmını ayrı bir fonksiyona aldım.

Aklıma gelen bütün tarih kombinasyonlarını denedim ve şu anda hiçbir hata yok.