Я думаю, что это то, что вы хотите .... конечно, вы можете просто определить возраст людей с точностью до дня и округлить его вверх или вниз до ближайшего года ..... что, вероятно, то, что я должен иметь сделано.
Это довольно грубая сила, так что я уверен, что вы можете сделать это лучше, но то, что он делает, это проверяет количество дней до этого года, следующего года и прошлогоднего дня рождения (я проверил каждый из этих трех отдельно вместо вычитая из 365, поскольку date () заботится о високосных годах , а я не хочу). Затем он вычисляет возраст, исходя из того, какой из этих дней рождения ближе всего.
Рабочий пример
<?php
$bday = "September 3, 1990";
// Output is 21 on 2011-08-27 for 1990-09-03
// Check the times until this, next, and last year's bdays
$time_until = strtotime(date('M j', strtotime($bday))) - time();
$this_year = abs($time_until);
$time_until = strtotime(date('M j', strtotime($bday)).' +1 year') - time();
$next_year = abs($time_until);
$time_until = strtotime(date('M j', strtotime($bday)).' -1 year') - time();
$last_year = abs($time_until);
$years = array($this_year, $next_year, $last_year);
// Calculate age based on closest bday
if (min($years) == $this_year) {
$age = date('Y', time()) - date('Y', strtotime($bday));
}
if (min($years) == $next_year) {
$age = date('Y', strtotime('+1 year')) - date('Y', strtotime($bday));
}
if (min($years) == $last_year) {
$age = date('Y', strtotime('-1 year')) - date('Y', strtotime($bday));
}
echo "You are $age years old.";
?>
Редактировать: удалены ненужные date()
с в $time_until
кальках.