Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
What is best way to calculate age
Message
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:
01155606
Views:
87
>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
**********************************************************************************
*  Author............: Cetin Basoz
*  Created...........: 11/02/2004  10:52:17
*!*	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
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform