# Calculate Age from Date with PHP Josh Sherman

Calculating the age based on a date is a pretty simple task that can be accomplished many different ways (Google yield’s quite a few different approaches). The caveat that usually arises is that you need to factor in which side of the birthday you are on based on the day’s date. What I mean is, using myself as the example, I was born on February 23rd. From January 1st to the 22nd of 2013 I was 31 years old. From the 23rd of February until February 22nd, 2014 I will be be 32 years old. To accomplish this you will need to determine what date it is and calculate the difference accordingly:

``````\$birthday           = '1981-02-23';
\$today              = date('Y-m-d');
list(\$y1, \$m1, \$d1) = explode('-', \$birthday);
list(\$y2, \$m2, \$d2) = explode('-', \$today);
\$m1                 = \$m2 - \$m1;

if (\$m1 < 0 || (\$m1 == 0 && \$d2 - \$d1 < 0))
{
\$y1++;
}

\$age = \$y2 - \$y1;
``````

Sorry about the abbreviated variable names, generally not my style but thought it was be just as confusing using `\$dob_year` and `\$today_year`. Okay, maybe it wouldn’t have been so bad. The gist is depending if the current date is before or on / after the birthday, offset the year before calculation.

There is a significantly shorter (but not nearly as accurate in my opinion) way to calculate the age:

``````\$age = floor((time() - strtotime(\$birthday)) / 31556926);
``````

The value 31556926 is the equivalent of 365.242190 days, or what we consider to be a full year (factors in leap day and such). Fact is, time is relevant and we could get into a whole debate over the exactly length of a year. This shorter solution will get you the right answer and I’m actually unsure under what scenario it would falter (it would only be for part a day when it does though).

Now these are both great examples if you’re using a PHP version before 5.3 which introduced the `date_diff()` function which is simply an alias for `DateTime::diff()` but with significantly reduced syntax. As both were introduced in 5.3, there’s no reason to use the longer syntax (and I won’t be discussing it). To get the age all you need is:

``````\$datetime = date_diff(date_create(), date_create(\$birthday));
\$age      = \$datetime->format('%Y');
``````

Okay, so it’s a bit longer than the previous example, but it also give you the flexibility to return more than just the year. With the `format()` object function (or `date_format()` if you’d rather pass the `\$datetime` object as an argument) you could get how many years, months, days, hours, minutes and seconds old someone is. Could come in handy if you had a website for your child and wanted to calculate how many months old they are for the first year (or 2 as most people seem to do).

### Good stuff? Want more?

Weekly emails about technology, development, and sometimes sauerkraut.

100% Fresh, Grade A Content, Never Spam. 