Re: subtracting dates...
| From: | John Ryan | Date: | Sun, 03 Aug 2003 00:18:25 +0000 |
| Subject: | Re: subtracting dates... | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-158062@lists.php.net to get a copy of this message | ||
yeah, thats the code i wrote myself (nearly). it gets the job done.
thanks
"Curt Zirzow" <curt@zirzow.dyndns.org> wrote in message
news:20030802231807.GH21938@bagend.shire...
> * Thus wrote John Ryan (celticfc@iol.ie):
> > 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."