Итак, у меня есть этот код:
$date_from = "2017-04-01";
$date_to = "2017-05-01"
$stmt = $this->pdo->prepare("SELECT * FROM records where created_at BETWEEN :start_date AND :end_date");
$stmt->execute([':start_date' => $date_from, ':end_date' => $date_to]);
мой created_at
это timestamp
поле.
Моя проблема здесь в том, что, хотя это работает, мне нужно только выбрать между месяцами и годом только в created_at
поле, потому что в моем коде дата также включена в выбор данных. Я только хочу "2017-04" - "2017-5"
записи, например, так что даже если запись, как "2017-05-31"
все еще находится под "2017-5"
, Что мне здесь не хватает?
Допустим, у меня есть запись, где created_at
значение "2017-05-01"
, Он не будет выбран, потому что он не находится между указанными датами, поэтому мне нужно исправить свой код, чтобы использовать только месяцы и годы, даже если указанные даты соответствуют дате.
Любая помощь приветствуется.
отформатируйте дату и время
Вы можете использовать сравнение строк.
DATE_FORMAT('2017-04-01','%Y%m')
Дата возвращения: 201704
,
так что ваше положение where должно быть
"created_at DATE_FORMAT(created_at,'%Y%m') >=
DATE_FORMAT($date_from,'%Y%m') and DATE_FORMAT(created_at,'%Y%m') <= DATE_FORMAT($date_to,'%Y%m')
«
Конвертируйте ваши даты в метки времени в php или даже в mysql
PHP:
$date_from_timestamp = strtotime($date_from);
$date_from_timestamp = strtotime($date_to);MySQL:
UNIX_TIMESTAMP($date_from)
UNIX_TIMESTAMP($date_to)
$date_from = "2017-04-01";
$date_to = date("Y-m-d",strtotime($date_from." +1 months"));
$stmt = $this->pdo->prepare("SELECT * FROM records where created_at BETWEEN :start_date AND :end_date");
$stmt->execute([':start_date' => strtotime($date_from), ':end_date' => strtotime($date_to]));
Попробуй это. Если вы создали — это отметка времени. Ваши критерии поиска также должны быть меткой времени
Для поиска в течение месяца или года вы можете сделать следующее.
$date_from = "2017-04-01";
$date_to = date("Y-m-d",strtotime($date_from." +1 months")); // to add one month from 2017-05-01
Я предполагаю, что вы игнорируете день ввода и просили получить записи за апрель и май
$date_from = "2017-04-01";
$date_to = "2017-05-01";
$stmt = $this->pdo->prepare("SELECT * FROM records where created_at BETWEEN :start_date AND :end_date");
$stmt->execute([
':start_date' => date("Y-m-01 00:00:00",strtotime($date_from)),
':end_date' => date("Y-m-31 23:59:59",strtotime($date_to))
]);