Нужно определить сколько лет человеку ...

evgkuz

Новичок
Нужно определить сколько лет человеку ...

Поле - "birthday" имеет тип DATE [YYYY-mm-dd].
Нужно определить сколько лет человеку (вроде ~ 22 года).

PHP:
$yy = substr($f[birthday], 0, 4);
$mm = substr($f[birthday], 5, 2);
$dd = substr($f[birthday], 8, 2);
$age = floor((time() - mktime (0,0,0,$mm,$dd,$yy))/(365 * 24 * 60 * 60));
Работает только с лудьми родившимися после 1970 (по понятным причинам).

Что я сделал не правильно ?
 

RomikChef

Guest
зачем-то влез а PHP
select (year(NOW())-year(birthday)) as age
вернет примерно 22
 

evgkuz

Новичок
Спасибо.
Только ваш вариант не учитывает месяцы и дни.

Вот мой вариант:

SELECT ( FLOOR((TO_DAYS(CURDATE())-TO_DAYS(a.birthday))/365) ) as age

Если у кого есть точнее, напишите пожалуйста.
 

Crazy

Developer
Алгоритм:

1. Из номера нынешнего года вычесть номер года рождения. Полученное число обозначим Y.
2. Вычислим номер дня в году для текущей даты (D1) и даты рождения (D0). Если D1<D0, то уменьшаем Y на 1.

Точность абсолютная.
 

evgkuz

Новичок
А эта запись не повлияет на скорость выполнения запроса ?
Уж больно он длинный получился.

SELECT ( IF(DAYOFYEAR(CURDATE())<DAYOFYEAR(a.birthday),year(CURDATE())-year(a.birthday)-1,year(CURDATE())-year(a.birthday)) ) as age
 

Crazy

Developer
IMHO, не сильно. Но я бы в выборке задал компоненты, а уже вместо соединял бы внутри PHP -- так код получается более "прозрачный".
 

evgkuz

Новичок
И ещё маленький вопрос :
У PHP есть помощь в виде файла "manual-en.chm" (с указателем, поиском, примерами и т.д.).
Нет ли такого же у MySQL ?
 

ForJest

- свежая кровь
есть. погляди топики за месяц или в поиск по форуму ман mysql
 
Сверху