1

Konu: 2 tarih arası fark

Selamlar;
Aşağıdaki kod ile farkı bulmaya çalışıyorum. Ayın 30 ve 31. günlerinde aynı sonuç geliyor.
Sorunu nasıl çözebilirim.

Visual Fox Pro
? NewBtwndates(DATE(2015,5,30),DATE(2015,7,23))

? NewBtwndates(DATE(2015,5,31),DATE(2015,7,23))
Function NewBtwndates()
Lparameters Ldate1,Ldate2
d1 = Ldate1
d2 = Ldate2
Store 0 To liJ , liM , liT
Do While d1 < d2
    Do Case
    Case Gomonth( d1 , 12 ) < d2
        liJ = liJ + 1
        d1 = Gomonth( d1 , 12 )
    Case Gomonth( d1 , 1 ) < d2
        liM = liM + 1
        d1 = Gomonth( d1 , 1 )
    Otherwise
        liT = liT + 1
        d1 = d1 + 1
    Endcase
Enddo
Return  Padl(Alltrim(Str(liJ)),4,'0') + Padl(Alltrim(Str(liM)),2,'0') + Padl(Alltrim(Str(liT)),2,'0')
Endfunc
Bilmediğin Neyse Yanıldığındır.

2

Re: 2 tarih arası fark

Tekrar selamlar;
Sonuç halen aynı.
MS SQL de de çevrim olabilir.
Destek bekliyorum.

Visual Fox Pro
KUCUK_TARIH=Date(2015,5,31)

BUYUK_TARIH=Date()
GUN = BUYUK_TARIH-KUCUK_TARIH
AY = Int(Mod(GUN,365.25)/30)
YIL = Int(GUN/365.25)
GG = Date(Year(KUCUK_TARIH)+YIL,Month(KUCUK_TARIH),Day(KUCUK_TARIH))
GG2 = Gomonth(GG,AY)
? YIL
? AY
? BUYUK_TARIH - GG2
Bilmediğin Neyse Yanıldığındır.

3

Re: 2 tarih arası fark

mrduyar yazdı:

Tekrar selamlar;
Sonuç halen aynı.
MS SQL de de çevrim olabilir.
Destek bekliyorum.

Visual Fox Pro
KUCUK_TARIH=Date(2015,5,31)

BUYUK_TARIH=Date()
GUN = BUYUK_TARIH-KUCUK_TARIH
AY = Int(Mod(GUN,365.25)/30)
YIL = Int(GUN/365.25)
GG = Date(Year(KUCUK_TARIH)+YIL,Month(KUCUK_TARIH),Day(KUCUK_TARIH))
GG2 = Gomonth(GG,AY)
? YIL
? AY
? BUYUK_TARIH - GG2

Çözüp çözmediğini bilmiyorum ama 2 tarih arasındaki farkı ben böyle yapmıştım.

* DATETIME(yıl,ay,gun,saat,dakika,saniye)

CLEAR
m.dateTime1=DATETIME(2015,5,30,1,15,0)
m.dateTime2=DATETIME(2015,8,1,2,15,0)

? "gun:"+STR(Int( (m.datetime2 - m.datetime1) / 86400 ) )
? "saat:"+STR(Int(( (m.datetime2 - m.datetime1) % 86400 ) / 3600 ) )
? "dakika:"+STR(Int((((m.datetime2 - m.datetime1) % 3600 ) /60)))

umarım işine yarar.

4

Re: 2 tarih arası fark

aşağıdakini uydurdum:

Visual Fox Pro
KUCUK_TARIH=Date(2015,5,31)

BUYUK_TARIH=Date()
 
m.tarih = MIN(KUCUK_TARIH, BUYUK_TARIH) && ne olur ne olmaz
m.ay = 1
m.gun = 1
m.PivotAy = -1/2
 
DO WHIL m.tarih =< MAX(KUCUK_TARIH, BUYUK_TARIH)
  IF  !  m.PivotAy = MONTH(m.tarih)
    m.PivotAy = MONTH(m.tarih)
    m.ay=m.ay+1
  ENDI
 
  m.gun=m.gun + 1
  m.tarih = m.tarih  + 1
ENDD
 
? m.tarih
? m.gun && m.tarih ile aynı olmalı
? m.ay
* istersen araya hafta, yıl sayacı da koyarsın
VFP9 SP2

5

Re: 2 tarih arası fark

Öncelikle ilginiz için teşekkürler.
@Timuçin @konuka
Gun,saat,dakika da sorun yok.
Sorun ay hesaplamada?
Bu kodu kıdem hesaplamada kullanıyorum.
Bana yıl-ay-gun hesaplayan bir kod lazım. (hesaplanacak tarih aralığı 24 yıl ile 2 ay arası)
Mevcut kod ile bazı aylardaki bazı günlerde 10-20 günlük sapmalar yapıyor.

Bilmediğin Neyse Yanıldığındır.

6

Re: 2 tarih arası fark

http://www.foxite.com/archives/age-calc … 210404.htm
Sorun çözlüldü.

Visual Fox Pro
*test için

Create Cursor Crt (tarih d,kalan c(20))
Ldate=Date(1993,1,19)
For Lxa=1 To date()-Date(1993,1,19)
    Insert Into Crt (tarih,kalan) Values(Ldate+Lxa,YeniKidemHesap1(Ldate+Lxa,Date()))
    Wait Window Lxa Nowa
Endfor
*Ldate1=DATE(2015,5,31)
*Ldate2=DATE(2015,7,28)
*? YeniKidemHesap1(Ldate1,Ldate2)
FUNCTION YeniKidemHesap1
LPARAMETERS Ld1,ld2
Local FromDate, ToDate, DaysDiff, CalcDate, BaseDate, lnYears,lnMonths, lnDays
FDTE=DTOC(ld1)
CDTE=DTOC(ld2)
FromDate=CTOD(FDTE)
ToDate= CTOD(CDTE)
Lcxa=substr(CDTE,4,2)
Lcxc=substr(CDTE,7,4)
Lcxd=mod(val(Lcxc),4)
Lcxe=val(Lcxa)
 
If Lcxe=01 .OR. Lcxe=03 .OR. Lcxe=05 .OR. Lcxe=07 .OR. Lcxe=08 .OR. Lcxe=10 .OR. Lcxe=12 then
Lcxb=31
endif
 
If Lcxe=04 .OR. Lcxe=06 .OR. Lcxe=09 .OR. Lcxe=11 then
Lcxb=30
endif
 
If Lcxe=02 .AND. Lcxd<>0 then
Lcxb=28
endif
 
If Lcxe=02 .and. Lcxd=0 then
Lcxb=29
endif
 
DaysDiff = M.ToDate-M.FromDate
BaseDate=Date(1000,1,Day(ToDate))
CalcDate=M.BaseDate+M.DaysDiff
lnYears=Year(M.CalcDate)-Year(M.BaseDate)
lnMonths=Month(M.CalcDate)-Month(M.BaseDate)
lnDays=ToDate-Gomonth(M.FromDate,12*lnYears+lnMonths)
if sign(lndays)=-1 .and. lnmonths>1 then
lnDays=Lcxb-abs(lndays)
lnmonths=lnmonths-1
endif
 
if sign(lndays)=-1 .and. lnmonths=0 then
lnDays=Lcxb-abs(lndays)
lnmonths=12-1
lnyears=lnyears-1
endif
 
if sign(lndays)=-1 .and. lnmonths=1 then
lnDays=Lcxb-abs(lndays)
lnmonths=1-1
endif
RETURN  Padl(Alltrim(Str(M.lnYears)),4,'0') + Padl(Alltrim(Str(M.lnMonths)),2,'0') + Padl(Alltrim(Str(M.lnDays)),2,'0')
ENDFUNC
Bilmediğin Neyse Yanıldığındır.

7

Re: 2 tarih arası fark

mrduyar yazdı:

Öncelikle ilginiz için teşekkürler.
@Timuçin @konuka
Gun,saat,dakika da sorun yok.
Sorun ay hesaplamada?
Bu kodu kıdem hesaplamada kullanıyorum.
Bana yıl-ay-gun hesaplayan bir kod lazım. (hesaplanacak tarih aralığı 24 yıl ile 2 ay arası)
Mevcut kod ile bazı aylardaki bazı günlerde 10-20 günlük sapmalar yapıyor.

Benim kod gün gün gittiği için doğru olması lazım. Kıdem tazminatı için ay sayacını yıl sayacı olarak değiştirip, her değişen yıl için

Visual Fox Pro
m.ay=0


artık gün sayısı için

Visual Fox Pro
m.ay=m.ay+1 && olan yere

m.gun=0   &&ilave ederek

sıfırlarsan olur diye düşünüyorum.

Eğer olmuyorsa zayıflığı paylaşırsan sevinirim...

VFP9 SP2

8

Re: 2 tarih arası fark

Selamlar,
@konuka
Bir üst mesajda sorunun çözümü var.

Bilmediğin Neyse Yanıldığındır.