>WITH CREATEOBJECT("age") > > CLEAR > > .CalcAge({^1988/2/29} , {^2006/9/14 }) > > ? .Years , .Months , .Days > > * CHECK with the correct definition Age = (((Birth+Y)+M)+D) > * forward is precise > ? GOMONTH(GOMONTH({^1988/2/29},.Years*12),.Months)+.Days > * backward is approx > ? GOMONTH(GOMONTH({^2006/9/14 } - .Days, -.Months), - .Years*12) > > * infact > * respect to YMD Feb 28/29 are equals !! > > .CalcAge({^1988/2/28} , {^2006/9/14 }) > > ? .Years , .Months , .Days > >ENDWITH > >define class age as relation > > Years = NULL > Months = NULL > Days = NULL > > procedure CalcAge > lparameters tdBirth, tdTarget > > PRIVATE dateStep > > WITH m.This > .Years = YEAR(m.tdTarget)-YEAR(m.tdBirth) > > dateStep = GOMONTH(m.tdBirth,.Years*12) > > IF m.dateStep > m.tdTarget > .Years = .Years - 1 > dateStep=GOMONTH(m.tdBirth,.Years*12) > ENDIF > > .Months = (MONTH(m.tdTarget) - MONTH(m.dateStep)) % 12 > > IF GOMONTH(m.dateStep,.Months) > m.tdTarget > .Months = .Months -1 > ENDIF > > .Days = m.tdTarget - GOMONTH(m.dateStep,.Months) > ENDWITH > > ENDPROC > >ENDDEFINE >