Рассчитать годы от даты - PullRequest
14 голосов
/ 11 июля 2009

Я ищу функцию, которая рассчитывает годы от даты в формате: 0000-00-00. Нашел эту функцию, но она не будет работать.

// Calculate the age from a given birth date
// Example: GetAge("1986-06-18");
function getAge($Birthdate)
{
  // Explode the date into meaningful variables
  list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate);
  // Find the differences
  $YearDiff = date("Y") - $BirthYear;
  $MonthDiff = date("m") - $BirthMonth;
  $DayDiff = date("d") - $BirthDay;
  // If the birthday has not occured this year
  if ($DayDiff < 0 || $MonthDiff < 0)
  $YearDiff--;
 }

echo getAge('1990-04-04');

ничего не выводит: /
У меня есть сообщение об ошибке, но я не получаю никаких ошибок

Ответы [ 4 ]

33 голосов
/ 11 июля 2009

Ваш код не работает, потому что функция не возвращает ничего для печати. ​​

Что касается алгоритмов, как насчет этого:

function getAge($then) {
    $then_ts = strtotime($then);
    $then_year = date('Y', $then_ts);
    $age = date('Y') - $then_year;
    if(strtotime('+' . $age . ' years', $then_ts) > time()) $age--;
    return $age;
}
print getAge('1990-04-04'); // 19
print getAge('1990-08-04'); // 18, birthday hasn't happened yet

Это тот же алгоритм (только на PHP), что и принятый ответ на этот вопрос .

Более короткий способ сделать это:

function getAge($then) {
    $then = date('Ymd', strtotime($then));
    $diff = date('Ymd') - $then;
    return substr($diff, 0, -4);
}
11 голосов
/ 29 января 2013

Альтернативный способ сделать это с PHP DateTime класс , который является новым с PHP 5.2:

$birthdate = new DateTime("1986-06-18");
$today     = new DateTime();
$interval  = $today->diff($birthdate);
echo $interval->format('%y years');

Посмотреть в действии

2 голосов
/ 10 октября 2016

Здесь может работать однострочная функция

function calculateAge($dob) {
    return floor((time() - strtotime($dob)) / 31556926);
}

Для расчета возраста

 $age = calculateAge('1990-07-10');
2 голосов
/ 11 июля 2009

Вам нужно вернуть $ yearDiff, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...