No such thing as a small change PerlMonks

### RE: Calculating a persons age based on their birthday.

by Simplicus (Monk)
 on May 03, 2000 at 20:20 UTC Need Help??

If all you want is the "year value" of a person's age, you
could divide by 365, after you added one to the number
of days for each of the leap years since the person's birth.
You could calculate this offset by subtracting their
birth year from the current year and dividing the result by
four. This works becuase they can't have been born both
before and after Feb 29th. Something like:
```
use integer;

#...code ommited; obtain \$days from FROM_DAYS()
#                 and \$birth_year from database

my \$this_year;
my @time;
my \$raw_years;
my \$num_leaps;
my \$int_years;
my \$float_years;

@time = localtime(time);
\$this_year = \$time[5] + 1900;
\$raw_years = \$this_year - \$birth_year;
\$num_leaps = \$raw_years / 4;
\$days += \$num_leaps;

\$int_years = \$days / 365;

no integer;

\$float_years = \$days / 365;

if (\$int_years == \$float_years) {
print "Today's your birthday!";
}

#...Then do whatever else you're going to do
I used a few more variable declarations than I would normally
but I wanted to clarify what I was doing. It's
quick and dirty, but probably works...
Simplicus

Replies are listed 'Best First'.
RE: RE: Calculating a persons age based on their birthday.
by Adam (Vicar) on May 03, 2000 at 20:52 UTC
If you want to be slightly more accurate (not that this matters for another 100 years, but hey!) the leap year formula is that a leap year is divisable by 4, but not 100 (except if divisable by 400). Of course, the amount of error induced by leap years wouldn't effect your program unless the person was over a thousand years old (one day of error every four years would take a long time to become relevant), otherwise its safe to just div by 365.

Article about leap years.

I'm not sure how clear I was in the previous post. I was rather tired and stuff. The original question was:

I need to calculate someone's age based on their birthday. The birthday is being pulled from MySQL so I have the FROM_DAYS() function which will give me the number of days they have been alive. I cannot just divide by 365 because of leap years and all. Any advice on accurately calculating someone's age?

So I was trying to say that leap years are irrelevant. You have the birth date. So you just divide the number of days by 365. This will be off by one day every four years, meaning that their birthday will appear to creep at the rate of 6 hours a year. This shouldn't be a big deal though... it just means that their birthday will move forward a day every four years. This means that if a person enters a birth date for an age verification system, it would let them by 4 days before their 18th birthday or 5 days before their 21st. In almost any other application, the error is negligable.

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://10111]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2024-08-14 14:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When will the AI bubble burst?

Results (29 votes). Check out past polls.

Notices?
 • erzuuli ‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.