检查范围时间是否为新一天前后 30 分钟



我将日期和时间分别存储在表格的不同列中。所以我正在尝试检查当前时间是比数据库中的时间早 30 分钟还是晚 30 分钟。

假设我有一个存储的日期和时间列表,如下所示:

日期 | 时间 2020-05-29 00:10:002020-05-29 09                       :00:00


 

如果我的当前日期是2020-05-28并且时间是23:50:00,则最近的日期和时间应该是第一行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 分钟,我无法正确获得范围。

为什么不使用获取数据的 mysql 查询执行此操作?这比使用 php 预感要简单得多。

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)

这会将日期和时间字段连接成一个日期时间。

相关内容

  • 没有找到相关文章

最新更新