On Jul 6, 2005, at 3:59 PM, Richard Lynch wrote:

365.24 is an appoximation.

Sooner or later, it's gonna bit you in the butt.

If you want somebody's age accurately, you're probably going to have to do
it the hard way.

Something like this might work:

<?php
  $DOB = "1988-07-06";
  $now = date('Y-m-d');
  list($by, $bm, $bd) = explode('-', $DOB);
  list($ny, $nm, $nd) = explode('-', $now);
  $age = $ny - $by;
  if ($age){
    if ($bm < $nm){
      // do nothing, they were born before this month
      // so subtracting the years is correct
    }
    elseif ($nm < $bm){
$age--; //They were born in a later month, so not quite a year yet
    }
    else{
      //They were born this month. Count the days.
      if ($bd < $nd){
        //Do nothing.  They were born before this date.
      }
      elseif ($nd < $bd){
$age--; //They were born later this month, so not quite a year yet
      }
      else{
        //It's their birthday! Go ahead and count it as a year,
        //unless you want to futz with the hour of their birth...
      }
    }
  }
  if (!$age){
    //Do whatever you want with children less than 1 year old...
//return it as "X months" or just call it "infant" or pretend they're 1
    //or whatever.
    //Maybe even just use $age (which is 0) and call it done.
  }
?>

Actually, I was thinking it could be done inside a simple formula since his original "formula" works on the "leap" years, ie. years divisible by four. I guess the trick would be figuring out the actual seconds in a year and doing most of the calculations on the unix timestamp. Something is tickling the back of my brain on this but I can't see it just yet. Eh...

Edward Vermillion
[EMAIL PROTECTED]

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

Reply via email to