Подтвердить что ты не робот

Сравнение даты mysql с date_format

Я googled и попробовал несколько способов сравнить дату, но, к сожалению, не получил результат, как ожидалось. Я имею текущее состояние записей, например следующее:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data;

              +-----------------------------------------+
              | date_format(date(starttime),'%d-%m-%Y') |
              +-----------------------------------------+
              | 28-10-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 03-11-2012                              |
              | 03-11-2012                              |
              | 07-11-2012                              |
              | 07-11-2012                              |

Я хотел бы сравнить дату и, соответственно, сделать так:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
               +-----------------------------------------+
               | date_format(date(starttime),'%d-%m-%Y') |
               +-----------------------------------------+
               | 28-10-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 03-11-2012                              |
               | 03-11-2012                              |
               | 07-11-2012                              |
               | 07-11-2012                              |

Я считаю, что результат не должен включать "28 -10-2012". Любое предложение? Спасибо заранее.

4b9b3361

Ответ 1

Ваш формат в основном не сортируемый для начала - вы сравниваете строки, а строка "28-10-2012" больше, чем "02-11-2012".

Вместо этого вы должны сравнивать даты как даты, а затем только преобразовывать их в свой целевой формат для вывода.

Попробуйте следующее:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

(Вход всегда должен быть в форме year-month-value, согласно документации.)

Обратите внимание, что если starttime - это поле DATETIME, вы можете захотеть изменить запрос, чтобы избежать повторного преобразования. (Оптимизатор может быть достаточно умным, чтобы этого избежать, но стоит проверить.)

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

(Обратите внимание, что для начала форматировать дату как d-m-Y было бы лучше использовать y-M-d в целом, являясь стандартом ISO-8601 и т.д. Однако приведенный выше код делает то, что вы просили в вопросе.)

Ответ 2

Используйте 2012-11-02 вместо 02-11-2012, и вам больше не понадобится date_format()

Ответ 3

Используйте следующий метод:

public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
  return round(abs(strtotime($date1)-strtotime($date2))/86400);
}  
/* end function dateDiff */

Это поможет!