Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как получить возраст человека по дате его рождения


Автор: kuller 19.4.2010, 02:54
Здравствуйте!
Вобщем задался целью вычислить возраст человека, зная его дату рождения.
Формат даты в БД: 2010-04-18
Ну вот сам написал длинющих код с кучей условий, а потом погуглил и нашел вот какой вариант решения этой проблемы:

Код

list($year, $month, $day) = explode("-", $date_b); 
echo (date("Y")-$year-(intval($month.$day)-intval(date("m").date("d"))?1:0));


$date_b - дата рождения человека

Мне не понятна запись: (intval($month.$day)-intval(date("m").date("d"))?1:0), кто то может объяснить???

Заранее спасибо!!!

Автор: SickFxck 19.4.2010, 07:33
Код неправильный. Там пропущено условие "> 0". Переписывается проще:
Код

echo date("Y") - $year - ($month.$day > date("md"));

Разница в возрасте определяется не только годами.
$month и $day должны быть с leading zeros.

Автор: kuller 19.4.2010, 09:42
SickFxck, Спасибо! 
Да когда я вчера тестил работу того кода, то не мог понять почему он не правильно вычислял возраст на некоторых случаях.
SickFxck, Ваш код работает правильно, но все же хотелось узнать как в том ПЕРВОМ случае происходит обработка того выражения.

Автор: SickFxck 19.4.2010, 17:39
Цитата(kuller @  19.4.2010,  09:42 Найти цитируемый пост)
SickFxck, Ваш код работает правильно, но все же хотелось узнать как в том ПЕРВОМ случае происходит обработка того выражения. 

Мой код понятен? Чем тот код (если его подправить) принципиально отличается от моего?

Автор: kuller 20.4.2010, 11:20
SickFxck, ну по Вашему код я понял, что если условие TRUE, то возвращется 1 (получается, что ДР еще не было) и отнимается от разности: date("Y") - $year, а если ложь, то получается, что ДР уже был и возвращается 0 и возраст вычисляется только разностью годов. 

SickFxck, правильно я понял???

Автор: azesmcar 20.4.2010, 11:25
kuller

Если данные хранятся в базе то не вижу смысла писать это на PHP, возраст можно получать из базы SQL запросом. База данных предоставляет удобные функции для работы с датой, зачем делать это на PHP?
Код

SELECT FLOOR(DATEDIFF(CURDATE(), '1983-01-08') / 365) AGE

это для MySQL.

Автор: SickFxck 20.4.2010, 17:16
http://dev.mysql.com/doc/refman/5.0/en/date-calculations.html

Добавлено через 6 минут и 14 секунд
azesmcar, ты пренебрегаешь високосными годами. То есть в районе самого дня рождения могут быть ошибки.

Автор: kuller 21.4.2010, 09:24
Цитата

Если данные хранятся в базе то не вижу смысла писать это на PHP, возраст можно получать из базы SQL запросом. База данных предоставляет удобные функции для работы с датой, зачем делать это на PHP?



azesmcar, Если често, то я даже не слышал о такой функции получения возраста из БД.
azesmcar, спасибо, буду пробывать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)