Albert,

I have a piece of code that gives me the integer age as of any given date.  May 
work for you.  You provide dates for vdate and vbirthdate.  Desired output is 
an integer age in variable vyear.

This was not a critical result for my app - thus I have never tested it 
extensively.  While I think the logic is sound, it might be worth testing 
should you choose to use it.

set var vmonth = ((imon(vdate)) - (imon(vbirthdate)))
set var vday   = ((iday(vdate)) - (iday(vbirthdate)))
set var vyear  = ((iyr(vdate))  - (iyr(vbirthdate)))

if vmonth < 0 then
  set var vyear = (vyear - 1)
endif

if vmonth = 0 then
  if vday < 0 then
    set var vyear = (vyear - 1)
  endif
endif



-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Albert Berry
Sent: Thursday, June 03, 2010 1:08 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - Re: Exact Age on a specific date

Thanks for the input, Bill. This is for a Soap Box Derby as sponsored by 
the Knights of Columbus. I ran it last year, but this year it seems that 
they want to up the thing a little, so we are wrapping in all the 
finances, allowing for 3 best of 4 heats, and such like interesting 
little details.

They were so happy with my volunteer work (yeah, I'm a KC) that I now 
have to allow for an adult race as well, and it is a knockout one. Fun!

Albert

Bill Downall wrote:
> Albert,
>
> Sounds like a fun application.
>
> Here's one way. You'll have to work very hard to find the very 
> occasional case where it is off by a day for the driver who is 15 on 
> race day. I don't think you can make it fail for the driver who turns 
> 9 on race day. How often are race days on leap day?
>
> (INT( (raceDate - BirthDate) / 365.25)) 
>
> If you have to really make absolutely sure about those two cases and 
> the leap year math, then you'll have to break out month, day, and year 
> from each date, and compare the month and day as well as the year.
>
> Age if birthday month and day is before race day:
>
> ( (IYR4(racedate)) - (IYR4(birthdate)) )
>
> And then, subtract a year from age if race day is before birthday: 
> ("If integer day of year of birthdate is great than integer day of 
> year of racedate, subtract 1, else subtract zero")
>
> ( (IYR4(racedate)) - (IYR4(birthdate)) - (IFGT( (IDOY(birthdate)), 
> (IDOY(racedate)), 1, 0 )) )
>
> But a racedate or a birthdate in a leap year, combined with a race 
> date within 1 day of the birthday could still screw you up, so you 
> might have to make this more complicated with IMON and IDAY.
>
> Bill
>
>
> Bill
>
> On Thu, Jun 3, 2010 at 2:23 PM, Albert Berry <[email protected] 
> <mailto:[email protected]>> wrote:
>
>     Has anyone encountered the situation where the exact age is
>     required for eligibility?
>
>     I am working on something that requires a child's age to be
>     between 9 and 14 on a particular race date. I want to be able to
>     display the age as of the date of a race. The rules are that
>
>     01 9th birthday is on or before race day.
>     02 15th birthday is after race day, not on race day.
>
>     That's easy to handle as an eligible/ineligible switch. What I
>     want to do is to display the age as an integer number by comparing
>     the race date with the birth date.I can do it in my head as all of
>     you can, but my little grey cells are on strike. I just cannot
>     figure out a simple method of displaying this value using a single
>     formula. Example follows.
>
>     Birth Date: 6/11/2000 + Race Date: 6/10/2010 = 9 years old.
>     Birth Date: 6/10/2000 + Race Date: 6/10/2010 = 10 years old.
>     Birth Date: 6/09/2000 + Race Date: 6/10/2010 = 10 years old.
>
>     Data sources:
>       Races.Race = Cars.Race           -- PK < FK
>      Drivers.DriverID = Cars.DriverID -- PK < FK
>      Races.RaceDate
>      Drivers.DriverBirthDate
>
>     Age goes here: Cars.Age
>
>     The same driver can race in multiple years and multiple races
>     within a year. The Cars table will list the car and driver in a
>     separate data row for each race. The age on the specific date of
>     the race is the necessary integer value
>
>     All help gratefully received.
>
>     Albert
>
>
>


Reply via email to