Как рассчитать возраст чего-либо по дате с помощью PHP

Управлять датами с помощью PHP стало действительно легко благодаря обширным коллекциям классов, которые php предлагает для их обработки. Если вы не знаете, как получить разницу в годах (и других значениях) между двумя указанными датами, эта статья может оказаться полезной для вас.

Рассчитать возраст

В следующем фрагменте показано, как получить разницу во времени между датой и временем. Свойство diff объекта DateTime позволяет получить подробную информацию о диапазоне между указанными датами:

  • лет ($ diff-> y)
  • месяцы ($ diff-> m)
  • дни ($ diff-> days)
  • часов ($ diff-> h)
  • секунд ($ diff-> s)
$stringDate = "12/04/1950";
$date = new DateTime($stringDate);
$now = new DateTime();
$interval = $now->diff($date); // the interva contains information about the difference between now and the given date
var_dump($interval);
echo "There are ". $interval->y. " years between the given date and today";
// The output of the var_dump should be something like :
object(DateInterval)#3 (15) {
["y"]=>
int(65)
["m"]=>
int(3)
["d"]=>
int(9)
["h"]=>
int(0)
["i"]=>
int(21)
["s"]=>
int(54)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(1)
["days"]=>
int(23841)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}

Оборачивая это в функцию

function getDifferenceInYearsBetween($startDate,$limitDate){
$start = new DateTime($startDate);
$end = new DateTime($limitDate);
$interval = $end->diff($start);
return $interval->y;
}
//call it like
//month/day/year
echo getDifferenceInYearsBetween("11/19/1997","11/19/2012");

Примечание: если вы не можете использовать класс DateTime (из-за php версии 5.2 или чего-то еще), вы сможете найти возраст чего-нибудь с помощью следующего фрагмента:

// Note the format of the string ddate
$birthDate = "12/04/1950";
//explode the date to get month, day and year (careful with the separator character, change it to - if you use that sign)
$birthDate = explode("/", $birthDate);
//get age from date or birthdate
$age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
? ((date("Y") - $birthDate[2]) - 1)
: (date("Y") - $birthDate[2]));
echo "Age is:" . $age; // 65

Как следует из заголовка статьи, эта функция ограничивается только годами, однако это полезно, если у вас есть ограничение версии php.

Ссылка на основную публикацию