>.CalculateAge({^1996/6/30} , {^2003/9/29 }) >Observed 7 , 3, 0 >Expected 7 , 2, 30 >>
Define Class AgeCalculator As Custom Years = 0 Months = 0 Days = 0 Procedure CalcAge Lparameters tdBirth, tdTarget Local ldTemp, ldBirth, lnDrop If m.tdBirth > m.tdTarget ldTemp = m.tdTarget tdTarget = m.tdBirth tdBirth = m.ldTemp Endif ldBirth = Date(Year(m.tdTarget),Month(m.tdBirth),Day(m.tdBirth)) lnDrop = 0 If Empty(m.ldBirth) && leap case ldBirth = Date(Year(m.tdTarget),3,1) lnDrop = Iif(Month(m.tdTarget)<=2,0,1) Endif With This .Years = Year(m.tdTarget) - Year(m.tdBirth) - ; (Iif(m.ldBirth > m.tdTarget,1,0)) .Months = (Month(m.tdTarget) - Month(m.tdBirth) + 12 - ; (Iif(Day(m.tdBirth)>Day(m.tdTarget),1,0)))%12 ldTemp = Date( Year(m.tdBirth) + .Years, Month(m.tdBirth), Day(m.tdBirth) ) If Empty(ldTemp) ldTemp = Date( Year(m.tdBirth) + .Years, Month(m.tdBirth), Day(m.tdBirth-1) ) Endif .Days = m.tdTarget - Gomonth(m.ldTemp,.Months) - m.lnDrop Endwith Endproc enddefineCetin