За последние 24 часа нас посетили 17936 программистов и 1651 робот. Сейчас ищут 2172 программиста ...

Как ПРАВИЛЬНО добавлять дату?

Тема в разделе "Вопросы от блондинок", создана пользователем basist, 19 авг 2007.

  1. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Как правильно добавлять дату в MySql и с каким форматом лучше работать если нужно число, месяц и год.
    добавляю отсюда:

    HTML:
    1.  
    2. <form action="addaf.php" method="get">
    3.  
    4. <select name="dy">   <--! Год -->
    5. <option>2007
    6. <option>2008
    7. <option>2009
    8. <option>2010
    9.  
    10. <select name="dm">  <--! Месяц -->
    11. ...
    12. <option>11
    13. <option>12
    14.  
    15. <select name="dd">  <--! День -->
    16. ...
    17. <option>28
    18. <option>29
    19. <option>30
    20. <option>31
    21.  
    22. <br>
    23.      <input type="submit">
    24. </form>
    25.  
    это вообще так делается-то?? а то я первый раз с датой работаю :oops:


    addaf.php :


    PHP:
    1.  
    2. <?php
    3. // $dy, $dm, $dd - полученные переменные, правильно?
    4.  
    5. ...
    6. $str_sql_query = "INSERT INTO afisha (dat) VALUES ('???что здесь надо написать????????')";
    7.  
    8. if (!mysql_query($str_sql_query, $link))
    9.   {
    10.     echo "Не могу добавить данные";  
    11.     exit();
    12.   }
    13.  
    14. echo "Данные успешно добавлены";
    15. ...
    16. ?>
    17.  
    база была такая:

    [sql]
    CREATE TABLE afisha (......., dat DATE,......)
    [/sql]

    Добавляется естественно не только дата.. просто не стал постить информацию, не относящуюся к делу.
    Заранее всем спасибо
     
  2. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    вроде разобрался... вроде работает...
     
  3. Angerslave

    Angerslave Guest

    Посмотри функции time() и mktime(). В базе хранить можно в обычном BIGINT поле.
     
  4. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    не понял, как я их могу использовать в своём случае (как понятно из названия таблицы это афиша, и я добавляю в неё новые объявления с заданной датой)

    но всё же спасибо! пригодится в следующий раз
     
  5. Angerslave

    Angerslave Guest

    http://ru2.php.net/mktime

    int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] )

    Подставляешь аргументами твои числа, в базу добавляешь это число(которое возвратит функция), при выводе берёшь из базы обычное число и выводишь как в мане - echo date("M-d-Y", mktime(...));
     
  6. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    хм... класс!!... получается, что просто даты в mysql уже не нужны?
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    А я в простом "unsigned int" храню и мне пока хватает :)

    Нужны, просто если бы их не было никто бы не умер, все бы делали как предлогает Angerslave (и многие другие, иногда даже я)
     
  8. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    Понятно, Большое Спасибо за помощь и разъяснения
     
  9. Rizan

    Rizan Активный пользователь

    С нами с:
    25 июн 2007
    Сообщения:
    115
    Симпатии:
    0
    Адрес:
    Пермь
    Лично я предпочтение отдаю mktime(), считаю ее более удобной.все операции выполняю относительно ее...и в бд тоже храню эти секунды...
     
  10. Angerslave

    Angerslave Guest

    Как вариант, можно и в поле DATETIME хранить время и форматировать средствами мускуля, можно хранить секунды и форматировать средствами php. Тут уже дело вкуса имхо.
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Дело вашей педантичности, теоретически (с точки зрения оголтелого педанта) "правильно" было бы хранить DATETIME

    Хотя бы потому что сайт это в принципе и есть БД, а Апач и РНР это только средство его конвертации в HTML и отдачи клиенту, из чего исходит что если БД предоставляет какие-то фишки то надо ими пользоваться.

    С другой стороны очень многие хранят дату в простом INT и никто пока от этого вроде не умер...
     
  12. Angerslave

    Angerslave Guest

    Смотря как подходить к проблеме. Имхо, всё-таки сайт не оболочка для доступа к БД, а некое информационное пространство, которое для хранения информации использует БД. Пользователю же всё равно как там в БД хранится инфа, хоть в XML-документах, лишь бы снаружи нормально выглядело. Так что обе точки зрения правильные.
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Я пользуюсь специальными типами - DATE, DATETIME, TIMESTAMP.
    Если нужно задать время/дату, когда идет обновление/добавление в базу - использую NOW() (для первых двух типов).
     
  14. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Обе точки зрения конечно правильные, но есть одно но

    Если подходить к ситуации проще (и считать что сайт это просто "оболочка доступа к БД"):
    1 - программировать будет проще
    2 - (как следствие 1-го) ПО будет надёжнее
    3 - (как следствие 2-го) стоимость продукта выше
    4 - разработка быстрее
    5 - (как следствие 4-го) затраты на разработку ниже
    6 - (как следствие 5-го) программист будет богаче
     
  15. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    согласен с Vladsonом во многом, кроме (6). не очень отчётливо просматривается, панимашь, зависимость...

    а что касаемо даты... дни рождения, например, и некоторые другие события, случалось, происходили и до 1970-го года... timestamp, кстати, хранится в виде integer unsigned
     
  16. Angerslave

    Angerslave Guest

    stas_t, дату рождения, конечно, удобнее хранить в DATE, ибо врядли человек скажет во сколько точно он родился :)
     
  17. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    (6) это уже слишком далеко от сабжа, уж слишком много других параметров влияет на (6) по этому (6) возможно так и не случится (хотя хотелось бы)
     
  18. starkeen

    starkeen Активный пользователь

    С нами с:
    15 июн 2007
    Сообщения:
    37
    Симпатии:
    0
    Вот тоже столкнулся, испарил себе весь моск. Вот как вы, граждане, засовываете дату-время в DATETIME? Пробовал с разных сторон - ничего не хочет, даже строчку запроса копировал из пхпмайадмин - не хляет. А в простой DATE или простой TIME не хочет записывать.
    [sql]INSERT INTO comments (id, when, userid, userip, texts, parentid, type) VALUES (NULL, NOW(), 1, '0.0.0.0', 'Попробуем разок', 11, 'news')[/sql]
    тут он ругается.
     
  19. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    я храню отдельно год месяц и день, так проще. А вообще в чём проблема записать строку в поле формата DATE?! Привели строку к нужному формату и записали.
     
  20. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    может CURTIME(), CURDATE() ?
     
  21. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Уважаемый, вы просто как-то криво запрос составили - всё прекрасно в DATETIME вставляеться, он прекрасно понимает NOW() или CURRENT_TIMESTAMP - что угодно, что выдаёт дату в формате YYYY-MM-DD hh:ii:ss или unix timestamp