Как хранить данные времени и делать выборку (timestamp, datatime)?

Тема в разделе "Базы данных", создана пользователем danneo, 4 фев 2015.

Модераторы: latteo
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Нужно сделать выборку постов, получить у них дату создания и получить кол-во прошедшего времени (дней).
    Я так понимаю, нужно timestamp. Но не могу понять разницу timestamp, datatime.
    Подскажите, какой тип поля лучше, как делать подсчет дней?
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    385
    Симпатии:
    254
    Сделай тип поля INT(10) и туда записывай UNIX TIME. Получить его: $_SERVER['REQUEST_TIME'] или time().

    Дата создания: date() Перейти по ссылке

    Можно к примеру выборки делать - добавлено больше 3 дней назад. Или 40 дней и 15 часов назад:

    SELECT FROM `table` WHERE `date`< $_SERVER['REQUEST_TIME']-259200

    Переводчик: Перейти по ссылке
     
    AlgoriVismut нравится это.
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.518
    Симпатии:
    1.368
    Примеры:
    datatime - 2014-07-14 17:27:40
    timestamp - 1405348060

    При выборке они свободно конвертируются между собой через UNIX_TIMESTAMP() и FROM_UNIXTIME()

    Дни надо считать по календарю или по часам?
    К примеру, с 23:00 17 до 11:00 18, календарно день, а по часам полдня...
     
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    Нужно считать дни. необходимо запускать скрипт, который берет каждую запись и использует ее параметры, в том числе и параметр "сколько времени прошло с момента создания".
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.453
    Симпатии:
    113
    а что такое вообще timestamp? В mysql есть такой тип, но он формата "2014-07-14 17:27:40". Путаю mysql и php?
    Получается, что нужно получать данные в timestamp - 1405348060 и сохранять в БД с типом int?
    Что будет быстрее рабобать:
    1. сохранять в БД с типом datatime - 2014-07-14 17:27:40, при выборке высчитывать сколько дней прошло до настоящего времени (только не знаю как)
    2. сохранять в БД с типом int - 1405348060, при выборке высчитывать разницу между time() - данные из БД, после чего переводить в кол-во дней.
    И сколько знаков для поля int нужно для хранения временной метки?
    Напомню: необходимо получить сколько дней прошло с момента создания поста по настоящее время (когда выполняется скрипт).
     
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    385
    Симпатии:
    254
    С INT считать быстрее

    Что-бы получить кол-во дней прошедших:
    PHP:
    $days floor((time()-$time_from_db)/86400); // Округляем до целых дней
    86400 - Это секунд в сутках
    PHP быстро разберется с числами, тем более целыми.


    TIMESTAMP:
    Тип столбца Формат вывода
    TIMESTAMP(14) YYYYMMDDHHMMSS
    TIMESTAMP(12) YYMMDDHHMMSS
    TIMESTAMP(10) YYMMDDHHMM
    TIMESTAMP(8) YYYYMMDD
    TIMESTAMP(6) YYMMDD
    TIMESTAMP(4) YYMM
    TIMESTAMP(2) YY

    Перейти по ссылке
     
    danneo нравится это.
  7. ip027

    ip027 Создатель

    Регистр.:
    19 фев 2007
    Сообщения:
    22
    Симпатии:
    7