>>********************************************************************************** >>* Class.............: Viscollect_utility >>* Author............: Cetin Basoz >>* Project...........: Visual Collections >>* Created...........: 11/02/2004 10:52:17 >>* Copyright.........: (c) Jzanus, LTD, 2004 >>* Major change list.: >>* : ART - Moved Function to common_utiity.prg from viscollect_utility.prg >> >>*!* oAge = createobject('Age') >>*!* ldBirth = {^1961/1/19} >>*!* ldTarget = date() && How old is he today. >>*!* oAge.CalcAge(ldBirth, ldTarget) >>*!* ? oAge.Years, oAge.Months, oAge.Days >> >>define class age as relation >> Years=0 >> Months=0 >> Days=0 >> procedure CalcAge >> lparameters tdBirth, tdTarget >> local ldTemp, ldBirth, lnDrop >> if tdBirth > tdTarget >> ldTemp = tdTarget >> tdTarget = tdBirth >> tdBirth = ldTemp >> endif >> ldBirth = date(year(tdTarget),month(tdBirth),day(tdBirth)) >> lnDrop = 0 >> if empty(ldBirth) && leap case >> ldBirth = date(year(tdTarget),3,1) >> lnDrop = iif(month(tdTarget)<=2,0,1) >> endif >> with this >> .Years = year(tdTarget) - year(tdBirth) - (iif(ldBirth > tdTarget,1,0)) >> .Months = (month(tdTarget) - month(tdBirth) + 12 - ; >> (iif(day(tdBirth)>day(tdTarget),1,0)))%12 >> .Days = tdTarget - gomonth(tdBirth,.Years*12+.Months) - lnDrop >> endwith >> endproc >>enddefine >>>
>WITH CREATEOBJECT("age") > > .CalcAge({^1988/2/29} , {^2006/9/14 }) > > CLEAR > > * Observed : 18,6,15 > * Expected : 18,6,17 > > ? .Years , .Months , .Days > * CHECK with the correct definition Age = (((Birth+Y)+M)+D) > ? GOMONTH(GOMONTH({^1988/2/29},.Years*12),.Months)+.Days > * CHECK with a bad definition > ? GOMONTH({^1988/2/29},.Years*12+.Months)+.Days > * none definition can return {^2006/9/14 } >ENDWITH > > >********************************************************************************** >* Class.............: Viscollect_utility >* Author............: Cetin Basoz >* Project...........: Visual Collections >* Created...........: 11/02/2004 10:52:17 >* Copyright.........: (c) Jzanus, LTD, 2004 >* Major change list.: >* : ART - Moved Function to common_utiity.prg from viscollect_utility.prg > >*!* oAge = createobject('Age') >*!* ldBirth = {^1961/1/19} >*!* ldTarget = date() && How old is he today. >*!* oAge.CalcAge(ldBirth, ldTarget) >*!* ? oAge.Years, oAge.Months, oAge.Days > >define class age as relation > Years=0 > Months=0 > Days=0 > procedure CalcAge > lparameters tdBirth, tdTarget > local ldTemp, ldBirth, lnDrop > if tdBirth > tdTarget > ldTemp = tdTarget > tdTarget = tdBirth > tdBirth = ldTemp > endif > ldBirth = date(year(tdTarget),month(tdBirth),day(tdBirth)) > lnDrop = 0 > if empty(ldBirth) && leap case > ldBirth = date(year(tdTarget),3,1) > lnDrop = iif(month(tdTarget)<=2,0,1) > endif > with this > .Years = year(tdTarget) - year(tdBirth) - (iif(ldBirth > tdTarget,1,0)) > .Months = (month(tdTarget) - month(tdBirth) + 12 - ; > (iif(day(tdBirth)>day(tdTarget),1,0)))%12 > .Days = tdTarget - gomonth(tdBirth,.Years*12+.Months) - lnDrop > endwith > endproc >enddefine >