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

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Нужно сделать выборку постов, получить у них дату создания и получить кол-во прошедшего времени (дней).
Я так понимаю, нужно timestamp. Но не могу понять разницу timestamp, datatime.
Подскажите, какой тип поля лучше, как делать подсчет дней?
 
Сделай тип поля INT(10) и туда записывай UNIX TIME. Получить его: $_SERVER['REQUEST_TIME'] или time().

Дата создания: date() Для просмотра ссылки Войди или Зарегистрируйся

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

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

Переводчик: Для просмотра ссылки Войди или Зарегистрируйся
 
Нужно сделать выборку постов, получить у них дату создания и получить кол-во прошедшего времени (дней).
Я так понимаю, нужно timestamp. Но не могу понять разницу timestamp, datatime.
Подскажите, какой тип поля лучше, как делать подсчет дней?
Примеры:
datatime - 2014-07-14 17:27:40
timestamp - 1405348060

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

Дни надо считать по календарю или по часам?
К примеру, с 23:00 17 до 11:00 18, календарно день, а по часам полдня...
 
Примеры:
datatime - 2014-07-14 17:27:40
timestamp - 1405348060

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

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

Нужно считать дни. необходимо запускать скрипт, который берет каждую запись и использует ее параметры, в том числе и параметр "сколько времени прошло с момента создания".
 
а что такое вообще 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 нужно для хранения временной метки?
Напомню: необходимо получить сколько дней прошло с момента создания поста по настоящее время (когда выполняется скрипт).
 
а что такое вообще 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 нужно для хранения временной метки?
Напомню: необходимо получить сколько дней прошло с момента создания поста по настоящее время (когда выполняется скрипт).
С 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

Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху