* Thus wrote John Ryan ([EMAIL PROTECTED]):
> Hi,
> 
hello ryan,

> In mySQL, I store dates as YYYY-MM-DD, a standard DATE type. It stores users
> date of births. I need to calculate in a PHP script, the users age from this
> DOB. I get a PHP date in the same format as the mySQL and subtract, which
> returns the year rounded off. ie, it doesnt matter if your birthdays in june
> of 1983 and the date is januray 2003, your age is still returned as 20, when
> it should be 19.
> 
> Does anyone know how can i get the right age?

To get a real age of someone you would use seconds, but since the actual
count of seconds get messed up on leap years (through the convertion
from seconds to years),  I approached it with the method most people
calculate ages.

Most people first look at the year and find the differnce, then if
the month/day hasn't come around you subtract one; alas the common
calculation for age.

Here is the code to demonstrate that logic:


$dob = split('-', '1980-12-1');
$now = split('-', date('Y-m-d'));

// we are either this age or one less
$age = $now[0] - $dob[0];

// have we gotten to the month of in dob?
if ($now[1] < $dob[1]) {

   // no, so we are technically a year less.
   $age--;

// If we're in the month,  has the day come yet?
} elseif ($now[1] = $dob[1] && $now[2] < $now[3]) {

   // no, still a few more days.
   $age--;
}

// your age is proper, in day to day usage.

/*
  Note:
  
  instead of the if () elseif() you can use
  if (mktime(0,0,0,$now[1],$now[2]) < mktime(0,0,0,$dob[1],$dob[2])) {
    $age--;
  }

*/


HTH, 

Curt
-- 
"I used to think I was indecisive, but now I'm not so sure."

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to