Сравнение дат PHP MySQL

Даты хранятся в БД как таковые: «2011-05-26 11:00:00» в поле datetime. Я хотел бы найти все строки, где дата больше, чем первая из этого месяца, то есть: 2011-05-01 09:00:00

Форматы даты в БД не могут быть изменены. Какую функцию MySQL я могу использовать для преобразования даты в БД в формат, который может обрабатывать сравнение? Я предполагаю, что лучший формат для «первого месяца» – это временная метка unix?

Значения времени в датах всегда присутствуют, но только часы работы, поэтому с 09:00 до 17:00.

Если он хранится в поле DATETIME , просто WHERE date > '2011-05-01 09:00:00' запрос на WHERE date > '2011-05-01 09:00:00' .

 $firstDayOfMonth = date( 'Ymd H:i:s', mktime(0,0,0,date('n'),1,date('Y')); $query = "SELECT * FROM `table` WHERE `date` >= '$firstDayOfMonth'"; 

Что-то вроде этого возможно?

 $oDateTime = new DateTime(); $sQuery = "SELECT * FROM table WHERE date >= ".$oDateTime->format("Ym")."-01 09:00:00"; 

Сравните непосредственно с datetime:

 WHERE date_field >= '2011-05-01 00:00:00' 

Поля DATETIME могут фильтроваться точно так же, как целые поля, например:

 SELECT * FROM `table` WHERE `date` > '2011-05-01 09:00:00' 

Если вы действительно хотите преобразовать метки времени Unix, посмотрите на функцию UNIX_TIMESTAMP .

Вы можете использовать функцию TIMESTAMPDIFF в MySQL для сравнения времени,
Функция FROM_UNIXTIME для форматирования временной метки Unix в качестве даты.

Дополнительные функции и примеры данных и времени mysql доступны в функции даты и времени MySQL Reference Manual .

Я думаю, что вы можете решить это, что-то вроде этого:

во-первых, создать первый день месяца в формате mysql в php

 $firsDay = date('Ymd 00:00:00', strtotime(date('Y-m').'-01 00:00:00')); 

и затем, используйте его в запросе

 select * from something where date >= $firsDay