Проверьте, составляет ли диапазон времени 30 минут до и после нового дня. - PullRequest
0 голосов
/ 28 мая 2020

У меня дата и время хранятся отдельно в разных столбцах таблицы. Итак, я пытаюсь проверить, является ли текущее время на 30 минут раньше или позже времени в базе данных.

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

дата | время
2020-05-29 00:10:00
2020-05-29 09:00:00

Если моя текущая дата 2020-05-28 и время 23:50:00, ближайшие дата и время должны быть 1-й строкой 2020-05-29, 00:10:00, где диапазон должен быть от 2020-05-28, 23:35:00 - 2020-05-29, 00:35:00

У меня есть код, но он может определять только диапазон времени на в ту же дату.

$currentTime = time();
$minTime     = date("H:i", strtotime('-30 minutes', $currentTime));
$maxTime     = date("H:i", strtotime('+30 minutes', $currentTime));

// My query to get the list of date and time on one specific date and populate to $datetimeArr
// $sql = 'SELECT id, date, time FROM table WHERE date = "'.date('Y-m-d').'"';

$datetimeArr = [
    [
        'date' => '2020-05-29',
        'time' => '00:10:00'
    ],
    [
        'date' => '2020-05-29',
        'time' => '09:00:00'
    ],
];

foreach ($datetimeArr as $k => $row) {
    if($row['time'] >= $minTime && $row['time'] <= $maxTime) {
        $nearestDate = $row;
        continue;
    }
}

Итак, проблема в том, что я не могу правильно определить диапазон, если он за 30 минут до или после нового дня.

1 Ответ

2 голосов
/ 28 мая 2020

Почему бы вам не сделать это с помощью запроса mysql, который принимает данные? Это было бы намного проще, чем сделать это с помощью php foreaches.

SELECT * FROM `TABLE` WHERE `time` > DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND `time` < DATE_ADD(NOW(), INTERVAL 30 MINUTE)

Обновление с необычным решением для вашего случая:

SELECT * from TableName where CONCAT(date, ' ', time) between DATE_SUB(NOW(), INTERVAL 30 MINUTE) and DATE_ADD(NOW(), INTERVAL 30 MINUTE)

Это объединит поля даты и времени в единственное datetime.

...