Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
What is best way to calculate age
Message
From
20/09/2006 13:10:59
 
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01155605
Message ID:
01155645
Views:
61
>>We need totals of clients by age bracket. What is the best way to calculate the age? Right now, we are using:
>>
>>INT((DATE() - a.dob) / 365)
>>
>>But that doesn't take into consideration leap years (which could be significant for someone over 90 years old). Any suggestions? Should I just use:
>>
>>INT((DATE() - a.dob) / 365.25)
>>
>>Or is there a better (more accurate) way?
>>
>>Thanks,
>>Doug

The so easy age by to calculate is not.

Your trust should stagger :)
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
	

*!*	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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform