Konu: Kaç gün geçti ?
Ör :
12.06.2012 tarihine kadar kaç gün geçtiğini bulan bir kısa kod ya da fonc. varmı ?
Teşekkürler ..
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
Ör :
12.06.2012 tarihine kadar kaç gün geçtiğini bulan bir kısa kod ya da fonc. varmı ?
Teşekkürler ..
Function diffinymdy
Lparameters tddate1, tddate2
** 2 tarih arası farkı bulur.
If Parameters() < 1
Return Replicate('0',8)
Endif
Local lnyears, lnmonths,lndays
If Empty(tddate2)
tddate2 = Date()
Endif
lnyears = Year(tddate2)-Year(tddate1)
If Gomonth(tddate1,lnyears*12) > tddate2
lnyears = lnyears - 1
Endif
tddate1 = Gomonth(tddate1,lnyears*12)
lnmonths = 0
Do While Month(tddate1) # Month(tddate2)
tddate1 = Gomonth(tddate1,1)
lnmonths = lnmonths + 1
Enddo
If Day(tddate1) > Day(tddate2)
lnmonths = lnmonths - 1
tddate1 = Gomonth(tddate1,-1)
Endif
lndays = tddate2 - tddate1
Return Padl(Int(lnyears * 10^4 + lnmonths * 10^2 + lndays),8,'0')
Endfunc
Bana örneğin 11.06.2012 gününe kadar kaç gün geçtiğini veren bir program lazım. Yani 365 gün 6 saatleri de hesaplayacak. ortalama şu kadar gün demeyecek...
Yani :
- a = 2012 X 365 gün 6 saat = .... gün
- b = 6 ay = ... gün
Toplam = a + b + 11 = .... gün diyebilen.
Bunu 1 defada verebilen bir FOXPRO fonksiyonu yokmu ?
Teşekkürler ..
0. yıldan başlıyorsa {^2012/06/11}-{^0001/1/1}+366 sonucu vermesi lazım.
1. yıl, 1. ay, 1. günden başlıyorsa da {^2012/06/11}-{^0001/1/1} olması lazım diye düşünüyorum.
Onder,
Oncelikle soruda mantik olmasi lazim. Neye gore kac gun gecti? Julian gunu soruyorsan:
? sys(11, date(2012, 6, 11))
0 tarihinden 11.06.2012 tarihine kadar geçen gün..
{^2012/06/11}-{^0001/1/1}+366+31+1
doğru sonuç gibi...
İlk günün 0. yıl, 1 Ocak olduğunu düşünürsen +31+1 yapmamak lazım diye düşünüyorum, +366 yeterli olması lazım. {^0001/1/1} yıla kadar sadece 366, hatta 365 gün geçmiş olması lazım.
haklısın
Sevgili Arkadaşlar,
Bir ara bu konuyla epeyce uğraşmıştım. Aşağıdaki bilgiler size yardımcı olacaktır:
Jülyen tarihinde 1 ocak 1(sıfır değil) tarihi başlangıç olarak alınır ve pazar günüdür.
01/01/0001 tarihinden itibaren geçen günler şöyle hesaplanır:
gün sayısı = (tarih yılı -1)*365+içinde bulunulan aya kadar geçen toplam gün+içinde bulunulan gün+int(tarih yılı)/400-int(tarih yılı/100)+int(tarih yılı/4)
Nedeni de :
yıl 4 e tam olarak bölünüyorsa şubat=29 ; 400 e tam olarak bölünüyorsa şubat gene 29 ama 100 e tam olarak bölünüyorsa 28 çeker
Not olarak söyleyeyim:
toplam gün sayısı 7 ye bölündüğü zaman artan yoksa cumartesi, 1 artarsa pazar, 2 artarsa pazartesi....... dir.
ocak=31
subat = subat(tarih yılı)
mart =31
nisan=30
mayıs=31
haziran=30
temmuz=31
ağustos=31
......... gibi
Function SUBAT
Parameters ANYYIL
Do Case
Case ANYYIL/400= Int(ANYYIL/400)
Return 29
Case ANYYIL/100= Int (ANYYIL/100)
Return 28
Case ANYYIL= Int (ANYYIL/4)
Return 29
Otherwise
Return 28
Endcase
Sevgilerimle.
Erdal
Selamlar,
Arkadaşlar yukarıdaki "diffinymdy" yanlış hesapladığını
? diffinymdy(DATE(2014,2,21),Date(2015,2,16))
00000291 YANLIŞ
? BTWNDATE(DATE(2014,2,21),Date(2015,2,16))
00001116 DOĞRU
? BTWNDATE(DATE()-100,DATE())
Function BTWNDATE
Lparameters startdate, enddate
If startdate > enddate
Wait Window "Start date must be earlier than End date" NOWAIT
Return
Endif
If Parameters() <> 2
Wait Window "Not Correct Number of Parameters" NOWAIT
Return
Endif
Private precmpdate, vyears, vmonths, vdays
precmpdate={}
vyears=0
vmonths=0
vdays=0
* Calculate:
* endofmonth is the last day of month prior to month of enddate
*
endofmonth = Ctod(Alltrim(Str(Month(enddate))) + '/' + "01" + '/' + ;
ALLTRIM(Str(Year(enddate)))) - 1
*
If Month(startdate) <= Month(enddate)
vyears = Year(enddate) - Year(startdate)
If Day(startdate) <= Day(enddate)
vmonths = Month(enddate) - Month(startdate)
vdays = Day(enddate) - Day(startdate)
Else
If Month(startdate) = Month(enddate)
vyears = vyears - 1
Endif
vmonths = Mod(Month(enddate) - Month(startdate) - 1 + 12, 12)
vdays = endofmonth - precmpdate + Day(enddate)
Endif
Else
vyears = Year(enddate) - Year(startdate) - 1
If Day(startdate) > Day(enddate)
vmonths = Month(enddate) - Month(startdate) + 12 - 1
vdays = endofmonth - precmpdate + Day(enddate)
Else
vmonths = Month(enddate) - Month(startdate) + 12
vdays = Day(enddate) - Day(startdate)
Endif
Endif
*!* Clear
*!* Wait Window Chr(13) + ;
*!* ' Years: ' + Str(vyears) + Chr(13) + ;
*!* ' Months: ' + Str(vmonths) + Chr(13) + ;
*!* ' Days: ' + Str(vdays) + Chr(13) + ;
*!* CHR(13) + ;
*!* ' Between ' + Dtoc(startdate) + Chr(13) +;
*!* ' and ' + Dtoc(enddate)
Return Padl(Alltrim(Str(vyears)),4,'0') + Padl(Alltrim(Str(vmonths)),2,'0') + Padl(Alltrim(Str(vdays)),2,'0')
Endfunc