Как выбрать записи между двумя датами, используя только месяц и год в PHP и MySQL?

Итак, у меня есть этот код:

$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", Он не будет выбран, потому что он не находится между указанными датами, поэтому мне нужно исправить свой код, чтобы использовать только месяцы и годы, даже если указанные даты соответствуют дате.

Любая помощь приветствуется.

1

Решение

отформатируйте дату и время

Вы можете использовать сравнение строк.

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') «

2

Другие решения

Конвертируйте ваши даты в метки времени в php или даже в mysql

PHP:
$date_from_timestamp = strtotime($date_from);
$date_from_timestamp = strtotime($date_to);MySQL:
UNIX_TIMESTAMP($date_from)
UNIX_TIMESTAMP($date_to)
1

$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
0

Я предполагаю, что вы игнорируете день ввода и просили получить записи за апрель и май

$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))
]);
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector