Я думаю, это то, что вы хотите .... конечно, вы могли бы просто получить возраст человека с точностью до дня и округлить его до ближайшего года в большую или меньшую сторону ... что, вероятно, я должен был сделать.
Это довольно грубая сила, поэтому я уверен, что вы можете сделать это лучше, но что он делает, так это проверяет количество дней до дня рождения в этом году, в следующем году и в прошлом году (я проверил каждый из этих трех по отдельности вместо того, чтобы вычитать из 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
.
person
Peter Ajtai
schedule
28.08.2011
date()
, тогда strtotime() вам в помощь. . - person Peter Ajtai   schedule 28.08.2011