in reply to Calculating a persons age based on their birthday.

Well, what exactly are you looking for? Something like "I've been alive 10 years", or "I've been alive 10.6293 years"? :) Or "I've been alive 10 years, 7 months, etc."?

Take a look at Date::Calc and Date::Manip.

  • Comment on Re: Calculating a persons age based on their birthday.

Replies are listed 'Best First'.
RE: Re: Calculating a persons age based on their birthday.
by artful (Initiate) on May 03, 2000 at 03:18 UTC
    I was just looking for the number of years alive. So like when their birthday rolls around I can say happy birthday your 10 years old. Or hey everyone John Doe is 10 years old today.
      Date::Calc (or, heaven forbid, Date::Manip) is probably overkill since you only want age in years. All you really want to know is whether the birthday has passed this year.
      sub age { # Assuming $birth_month is 0..11 my ($birth_day, $birth_month, $birth_year) = @_; my ($day, $month, $year) = (localtime)[3..5]; $year += 1900; my $age = $year - $birth_year; $age-- unless sprintf("%02d%02d", $month, $day) >= sprintf("%02d%02d", $birth_month, $birth_day); return $age; }
      Of course, if you're only using this on a person's birthday, all you need to do is subtract their birth year from the current year :-)
        The above code is what I'd recommend using, as it's simple enough that the use of modules isn't really needed.. Then again I'm not a module-nazi:) One caveat about this code though: The value returned to $month in the call to localtime is 0 based, i.e. 0..11. I'm not sure if this might contrast the format of the $birth_month that is being passed in.. if so, just change the appropriate line to read
        $age-- unless sprintf("%02d%02d", $month+1, $day)

        I don't think this code would work if the person was born before 1970.

        T.R. Fullhart, kayos@kayos.org