PHP вычисляет текущий возраст человека

У меня есть даты рождения на моем сайте в формате 12.01.1980 .

 $person_date (string) = Day.Month.Year 

Хотите добавить старость человека. Как « В настоящее время 30 лет » (2010 – 1980 = 30 лет).

Но makin функция только на годы не может дать идеальный результат:

Если дата рождения человека составляет 12.12.1980 а текущая дата – 01.01.2010 лицо не имеет 30 лет. Это 29 лет и один месяц.

Должны быть расчеты по таргетированию на год, месяц и день рождения с сопоставлением текущей даты:

0) Разберите даты.

 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) год сравнения, 2010 – 1980 = напишите «30» (пусть это будет переменная $total_year )

2) сравните месяцы, если (месяц рождения больше> чем текущий месяц (например, 12 в рождении и 01 текущий)) {делать минус один год из переменной $total_year (30 – 1 = 29)}. Если минус, закончите расчеты на этом этапе. Остальные идут следующим (3 шаг).

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

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

и проверьте день (на этом шаге):

  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;

Мои знания php не очень хорошие, надеюсь, что вы сможете помочь.

Благодарю.

Related of "PHP вычисляет текущий возраст человека"

Вы можете использовать класс DateTime и его метод diff () .

 <?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); 

печатает 29 years, 7 month, 20 days

Расширение ответа @ VolkerK – это отлично! Мне никогда не нравится видеть нулевой возраст, который случается, если вы используете только год. Эта функция показывает их возраст в месяцах (если они месячные или более), а в других случаях – в другие дни.

 function calculate_age($birthday) { $today = new DateTime(); $diff = $today->diff(new DateTime($birthday)); if ($diff->y) { return $diff->y . ' years'; } elseif ($diff->m) { return $diff->m . ' months'; } else { return $diff->d . ' days'; } } 

Я продолжил дальнейший ответ Джонатана, чтобы дать более «благоприятный для человека» ответ.

Используя эти даты:

 $birthday= new DateTime('2011-11-21'); //Your date of birth. 

И вызов этой функции:

 function calculate_age($birthday) { $today = new DateTime(); $diff = $today->diff(new DateTime($birthday)); if ($diff->y) { return 'Age: ' . $diff->y . ' years, ' . $diff->m . ' months'; } elseif ($diff->m) { return 'Age: ' . $diff->m . ' months, ' . $diff->d . ' days'; } else { return 'Age: ' . $diff->d . ' days old!'; } }; 

Возвращается:

 Age: 1 years, 2 months 

Симпатичный – для действительно молодых только несколько дней!