Препоръка: Поле за рожденна дата.

sentenello

Registered
Здравейте,
Интересува ме какъв тип да е полето в БД и как да се вкарва в него информация.

Примерно искам да вкарам 25-януари-1990, ако направя полето TIMESTAMP (DATE) в бд ще мога ли да го вкарам така.

INSERT INTO .... VALUE (1990-01-25 )
и най-важното е, че после искам да правя проверка на колко години е.
В един от файловете ще пресмятам на колко години е и ще го извеждам. Как ще стане това ако полето е типа който ми предлагате.

Благодаря предварително
 
shashma88 каза:
Аз използвам за такива неща, полето тип TEXT, и нямам проблеми, като си записвам датата dmy.
Въпроса е не дали ще имаш проблем, а дали правилно ти е направена конструкцията на таблицата, защото ако не използваш правилни типове полета при по-големи проекти може да доведе до големи неприятности. :lol:
 
Изборът е date.
При timestamp не става защото хората родени преди 1970 (не съм сигурен за точната година и дата) няма как да им запишеш рождената дата.
text съвсем не става...като видя такова поле за дата и ми става ясно цялата система как е писана.
 
adrian каза:
Изборът е date.
При timestamp не става защото хората родени преди 1970 (не съм сигурен за точната година и дата) няма как да им запишеш рождената дата.
text съвсем не става...като видя такова поле за дата и ми става ясно цялата система как е писана.
timestamp започва от 01.01.1970
 
Най-хубаво е абстракция от конкретната база данни ( MySQL ) и да го запишеш unix timestamp в тип INT/BIGINT ( след 2038 свършва INT-a. Не ми се смята отново, но е там някъде )
Така поне ще си сигурен, че ако минеш към друга база данни там ще има поддръжка на доста основните типове INT/BIGINT.
 
Значи излиза, че най-удачния вариант за записване на каквито и да е дати от който после ще се сравнява и т.н. е най-добре да бъдат в формат TIMESTAMP BIGINT ( което ще рече, че се записват от сорта на 123123123123 нали ? ) и ако се записват така, това UNIX формат ли е ?

Съжалявам за тъпите въпроси, но един път завинаги искам да се науча да работя правилно с тези дати, часове и т.н., защото във всяка една система ги има. Освен това искам да знам кога кой тип поле за дата е най-удачен. Затова и ви тормозя толкова :oops:
 
от дългите ми проблеми с избор на поле стигнах до извода, че ако записваш дати след 1970 година - timestamp, иначе date :)
 
adrian каза:
от дългите ми проблеми с избор на поле стигнах до извода, че ако записваш дати след 1970 година - timestamp, иначе date :)

Реших полето да е date, но после как ще вадя на колко години е дадения потребител ?
 
Аз си правя следния вариант полето ми в базата данни да си е най обикновен варчар и в него записвам датата по следния начин
Код:
1990-12-10
И после със ето този код си изчислявам на колко години е даден потребител
Код:
function birthday ($birthday)
  {
    list($year,$month,$day) = explode("-",$birthday);
    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff   = date("d") - $day;
    if ($month_diff < 0) $year_diff--;
    elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
    return $year_diff;
  }
 
echo birthday("1992-10-10");
Като вече си настройваш датата да ти идва от базата данни.
 
adrian каза:
Най-лесно става така:

SELECT DATE_FORMAT( FROM_DAYS( TO_DAYS( NOW( ) ) - TO_DAYS('полето с датата' ) ) , '%Y' ) +0 AS age

При тази заявка полето което съдържа датата трябва да е тип Date и да се записва от сорта на 2010-02-09 нали ?

Ако е така със заявката която ми даваш какво трябва да ехна за да ми изведе годините ?
 
Датата трябва да е във формат

yyyy-mm-dd или yyyy-mm-dd H:i:s (може да има и други възможности, но на тези 2 съм го пробвал). Т.е default стойностите на current_date() или current_timstamp :)

Ами годините ти се пазят в колона age :)

 
adrian каза:
Датата трябва да е във формат

yyyy-mm-dd или yyyy-mm-dd H:i:s (може да има и други възможности, но на тези 2 съм го пробвал). Т.е default стойностите на current_date() или current_timstamp :)

Ами годините ти се пазят в колона age :)


Благодаря ти много +1
 

Back
Горе