PHP и Mysql получают возраст по дате рождения, хранящейся как varchar

Я создаю приложение, которое берет данные из файла Excel и сохраняет в базе данных MySQL. Затем пользователи могут искать кандидатов по опыту, возрасту, навыкам и т. д. и т. д.

Моя таблица имеет следующую структуру: имя, фамилия, дата рождения (хранится как varchar), навыки, пол и т. д. и т. д.

Что мне нужно, так это как вычислить/вычислить/извлечь возраст кандидатов с помощью php/sql?

Я использую раскрывающийся список со следующими параметрами

<option value="0">--</option>
<option value="eqolderthan20">Equal or older than 20</option>  
<option value="equaloryoungerthan30">Equal or younger than 30</option>  
<option value="olderthan30">Older than 30</option>

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


person kanun    schedule 04.05.2014    source источник
comment
Не очень понятно. Как указанное выше <option> связано с вашей датой рождения?   -  person AyB    schedule 04.05.2014
comment
Ну, например, если пользователь выбирает из списка вариантов, кандидат должен быть равен или старше 20 лет, тогда я должен искать в своей базе данных кандидатов, которые равны или старше 20 лет.   -  person kanun    schedule 04.05.2014
comment
Почему вы используете varchar для хранения даты рождения?   -  person Ronni Skansing    schedule 04.05.2014
comment
Я использую библиотеку Phpexcel для чтения данных из файла Excel, я не мог понять, как сохранить его как тип даты в mysql. Он не хранится в базе данных как таковой. Есть ли способ преобразовать тип даты из varchar, а затем сравнить его?   -  person kanun    schedule 04.05.2014


Ответы (1)


Используйте strtotime(), чтобы получить дату рождения в качестве метки времени, а затем рассчитайте количество лет на основе разницы с текущей меткой времени. Предполагая, что $birthday - это varchar из вашей базы данных:

$age_in_years = floor((time() - strtotime($birthday))/(60*60*24*365));
person Mark Miller    schedule 04.05.2014
comment
Спасибо за ответ, но как мне включить это в SQL, чтобы получить пользователя на основе младшего или старшего возраста (например, моложе 30 лет)? - person kanun; 04.05.2014
comment
MySQL имеет аналогичную функциональность для извлечения информации о дате из varchar. См. этот пост и этот пост - person Mark Miller; 04.05.2014
comment
Большое спасибо, Марк М. Но я немного борюсь. Предположим, что это работает как шарм SELECT EXTRACT(YEAR(FROM_DAYS(DATEDIFF(NOW(),STR_TO_DATE(день рождения, '%m/%d/%Y'))))) + 0 age и извлекает возраст пользователей . Но я не хочу выбирать возраст, я просто хочу выбрать всю информацию о пользователях, возраст которых, скажем, моложе 30 лет. Где я должен разместить эту функцию извлечения? - person kanun; 04.05.2014
comment
Вы бы поместили это в предложение WHERE... SELECT cols FROM table WHERE EXTRACT(YEAR(FROM...)))))+0 < 30 - person Mark Miller; 04.05.2014
comment
Потрясающий. Большое спасибо. - person kanun; 04.05.2014