Я всегда использую этот код для элегантного расчета возраста пользователя и работает нормально ...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Age Information</title>
</head>
<body>
<?php
function Calc_Age($myday) {
date_default_timezone_set('Europe/Rome');
$birth = new DateTime($myday);
$birth->format('Y-m-d H:i:s');
$today = new DateTime('NOW');
$today->format('Y-m-d H:i:s');
$diffs = $today->diff($birth);
$myage = $diffs->y . ($diffs->y == 1 ? ' year, ' : ' years, ');
$myage .= $diffs->m . ($diffs->m == 1 ? ' month, ' : ' months, ');
$myage .= $diffs->d . ($diffs->d == 1 ? ' day, ' : ' days, ');
$myage .= $diffs->h . ($diffs->h == 1 ? ' hour and ' : ' hours and ');
$myage .= $diffs->i . ($diffs->i == 1 ? ' minute' : ' minutes');
return $myage;
}
?>
<h1>Actual age of Angela</h1>
<p>Angela is <?php echo Calc_Age("1967-01-23 05:00:00"); ?> old</p>
<h1>Actual age of Jhon</h1>
<p>Jhon is <?php echo Calc_Age("1977-04-14 09:10:00"); ?> old</p>
</body>
</html>
Вывод:
Ответ только по годам
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Age Information</title>
</head>
<body>
<?php
function Calc_Age($myday) {
date_default_timezone_set('Europe/Rome');
$birth = new DateTime($myday);
$birth->format('Y-m-d');
$today = new DateTime('NOW');
$today->format('Y-m-d');
$diffs = $today->diff($birth);
$myage = $diffs->y . ($diffs->y == 1 ? ' year' : ' years');
return $myage;
}
?>
<h1>Actual age of Angela</h1>
<p>Angela is <?php echo Calc_Age("1967-01-23"); ?> old</p>
<h1>Actual age of Jhon</h1>
<p>Jhon is <?php echo Calc_Age("1977-04-14"); ?> old</p>
</body>
</html>
Заключительные замечания
с mdY механизм php не может вычислить даты diff, чтобы правильно использовать этот класс php, вы должны использовать стандартную коннотацию Ymd.Это не может создать проблему, так как теперь вы знаете, что вам нужно вызывать функцию с этим форматом
Calc_Age("1967-01-23"); // Y-m-d (Year-month-day)
Надеюсь, эта помощь.