арифметика с датами

нубастый_мэн

Новичок
арифметика с датами

суть такая. в бд в поле типа (DATE) хранится дата рождения юзера. допустим вот такая (20.02.1983) как можно вычислить его возраст на сегодняшний день.
может есть какая-нибудь фича для вычитания дат )))
 

Фанат

oncle terrible
Команда форума
начнем с того, что такую дату не допустим.
дата должна быть только такая: 1983-02-20

-~{}~ 19.12.08 12:08:

далее.
я даю тебе ссылку. как пример того, что все нужное есть в документации.
http://phpclub.ru/mysql/doc/date-calculations.html

и впредь все надо искать там. самостоятельно
 

нубастый_мэн

Новичок
*****
спасибо.
тогда следующий вопрос.
у меня почему-то дата хранится в таком виде (20.02.1983)
в форме реги есть три инпута. для года,месяца и дня рождения
переменную для вставки формирую вот так.

$date_birth = $_REQUEST['year'].'-'.$_REQUEST['month'].'-'.$_REQUEST['day'];
Но такого вида 1983-02-20 почему-то всё равно нет.

p.s я новчиок в пхп ). сильно не бейте за такие жуткие вещи.
 

DiMA

php.spb.ru
Команда форума
на каком основании ты решил, что дата хранится как "20.02.1983"?
не проще ли не тупить (и нам тоже), а сообщить тип поля в таблице? phpMyAdmin - знаешь, что это?
даты в поле DATE или DATETIME хранятся как ГГГГ-ММ-ДД, а не ДД.ММ.ГГГГ
Если дата хранится как 20.02.1983, значит тип поля - обычный текст (VARCHAR, CHAR, TEXT и т.д.)
 

Фанат

oncle terrible
Команда форума
что значит "все равно нет"?
echo $date_birth что выводит?
 

DiMA

php.spb.ru
Команда форума
в общем, нужно:
1. организовать проверку корректности ввода даты, иначе 31 февраля 2008 в базу попадет как 0000-00-00 (а нужно выдать ошибку юзеру), а если вместо даты введут строку - тебе взломают сайт :) Для этого изучи функции php: mktime(), date(), addslashes().
2. хранить действительно в поле DATE.
3. чтобы вычислить разность 2х дат - ссылка выше. Она вычислят разность средствами MySQL.
4. при показе даты из базы на сайт, делаешь обратную конвертацию.
 

нубастый_мэн

Новичок
я еще в первом посту сказал, что типо поля DATE
возможно EMS SQL manager отображает дату именно как (20.02.1983). потому что
echo $date_birth выводит 1983-02-20 и я думаю, при выполнении запроса, была бы ошибка.
 
Сверху