1

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 ..

2

Re: Kaç gün geçti ?

Visual Fox Pro
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
Bilmediğin Neyse Yanıldığındır.

3

Re: Kaç gün geçti ?

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 ..

4

Re: Kaç gün geçti ?

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.

5 Son düzenleyen, cetinbasoz (12.06.2012 11:23:21)

Re: Kaç gün geçti ?

Onder,
Oncelikle soruda mantik olmasi lazim. Neye gore kac gun gecti? Julian gunu soruyorsan:

Visual Fox Pro
? sys(11, date(2012, 6, 11))

6

Re: Kaç gün geçti ?

0 tarihinden 11.06.2012 tarihine kadar geçen gün..
{^2012/06/11}-{^0001/1/1}+366+31+1
doğru sonuç gibi...

7

Re: Kaç gün geçti ?

İ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.

8

Re: Kaç gün geçti ?

haklısın

9

Re: Kaç gün geçti ?

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

10

Re: Kaç gün geçti ?

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

Visual Fox Pro
? 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
Bilmediğin Neyse Yanıldığındır.