tags:

views:

108

answers:

2

I have birth dates on my site in format 12.01.1980.

$person_date (string) = Day.Month.Year

Want to add an oldness of the person. Like "Currently 30 years" (2010 - 1980 = 30 years).

But makin the function just on years can't give the perfect result:

If person birth date is 12.12.1980 and current date is 01.01.2010 the person doesn't have 30 years old. It's a 29 years and one month.

There must be a calculation on targeting both year, month and day of birth with comparison of current date:

0) Parse the dates.

Birth date (Day.Month.Year):
Day = $birth_day;
Month = $birth_month;
Year = $birth_year;

Current date (Day.Month.Year):
Day = $current_day;
Month = $current_month;
Year = $current_year;

1) year comparison, 2010 - 1980 = write "30" (let it be $total_year variable)

2) compare the months, if (birth date month is bigger > than current month (like 12 in birth and 01 current)) { do minus one year from $total_year variable (30 - 1 = 29) }. If do minus happened, finish the calculations at this point. Else go the next (3 step).

3) else if (birth month < current month) { $total_year = $total_year (30); }

4) else if (birth month = current month) { $total_year = $total_year (30); }

and check the day (in this step):

 if(birth day = current day) { $total_year = $total_year; }
 else if (birth day > current day) { $total_year = $total_year -1; }
 else if (birth day < current day) { $total_year = $total_year; }

5) echo $total_year;

My php knowledge isn't good, hope you can help.

Thanks.

+6  A: 

You can use the DateTime class and its diff() method.

<?php
$bday = new DateTime('12.12.1980');
// $today = new DateTime('00:00:00'); - use this for the current date
$today = new DateTime('2010-08-01 00:00:00'); // for testing purposes

$diff = $today->diff($bday);

printf('%d years, %d month, %d days', $diff->y, $diff->m, $diff->d);

prints 29 years, 7 month, 20 days

VolkerK
Thats what I need, thanks man!
Happy
+1  A: 

VolkerK's answer is the only practice. You'll never need to parse date from strings or string to data conversion. Adhere to calling new DateTime object. Please keep PHP Manual with you. It's really like a tutorial rather than tedious language internal.

jack