Мне очень нравится подход brady.vitrano, и он также послужил основой для построения моего собственного помощника по вычислению возраста в годах, однако его код не учитывает високосные годы (например, дата рождения 1979-03-09 [общий год] и сегодня 2012-03-08 [високосный год], его метод возвращает 33, хотя реальный возраст - 32) - вот как его нужно продлить, чтобы получить правильный возраст, когда речь идет о високосных годах:*
И это код, если вы хотите работать со спецификатором даты Zend по умолчанию (вместо спецификатора даты в PHP):
$today = new Zend_Date();
$dateOfBirth = new Zend_Date($date);
/*** Considering the leap years if the birth date is on 1st march or later. ***/
if ($dateOfBirth->get('M') > 2) {
/*** Checking if the birth's year is a leap year. ***/
if ($dateOfBirth->get(Zend_Date::LEAPYEAR)) {
$birthLeap = 1;
}
/*** Checking if today's year is a leap year. ***/
if ($today->get(Zend_Date::LEAPYEAR)) {
$todayLeap = 1;
}
}
$age = $today->get('Y') - $dateOfBirth->get('Y');
if ($today->get('D') - $todayLeap < $dateOfBirth->get('D') - $birthLeap) {
$age--;
}