Сравнение метки времени с переменной date (MySQL и PHP)

#php #mysql

#php #mysql

Вопрос:

Любая помощь высоко ценится.

Допустим, у меня есть база данных MySQL со столбцом метки времени со значением «1305590400», как я могу сравнить это с переменной PHP, скажем, «2011-05-17»? Я хочу полностью игнорировать временную часть и сравнивать только дату.

На данный момент я пытаюсь заставить ее работать со следующим, но она не возвращает результатов:

 WHERE  FROM_UNIXTIME('timestamp_column','%Y-%m-%d') = '" . $date. "'
  

Ответ №1:

Вы не получаете результаты, которые, вероятно, $date имеют некоторое смещение по времени и не равны 00:00:00 вашему часовому поясу.

 WHERE timestamp_column BETWEEN '" . strtotime($date) . "' AND '" . strtotime($date, ' 1 day') . "'
  

или, если быть более точным:

     WHERE timestamp_column >= '" . strtotime($date) . "'
      AND timestamp_column < '" . strtotime($date, ' 1 day') . "'
  

Комментарии:

1. Столбец timestamp_column содержит случайные значения времени, есть ли способ игнорировать время и просто сравнивать дату?

2. @David: вот почему я добавил BETWEEN . Текущий запрос извлекает все данные между сегодняшним полуднем и завтрашним полуднем

3. Единственная проблема, с которой я сталкиваюсь, заключается в том, что я использую это в скрипте календаря, и я не думаю, что это вернет правильные результаты, хотя я определенно попробую это сейчас.

Ответ №2:

Просто

 SELECT [...] WHERE '$you_var' = date(`timestamp_column`);
  

Функция MySQL date()

Комментарии:

1. Как mysql использует индексы

2. Я предполагаю, что эта ссылка убедит меня в том, что мое решение работает медленнее, я прав? ^^

3. да. Ваш запрос всегда будет вызывать fullscan. Если у вас много строк и вам нужно быстро найти — не применяйте функции для полей в вашем WHERE .

Ответ №3:

Вы всегда можете преобразовать временную метку в форматированную дату.

 SELECT FROM_UNIXTIME(1358871753,'%Y %D %M');
  

Дата выпуска: 22 января 2013 года