猿问

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

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


假设我有一个这样存储的日期和时间列表:


日期         |       时间

2020-05-29 00:10:00

2020-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 分钟,我将无法正确获取范围。


萧十郎
浏览 92回答 1
1回答

UYOU

为什么不使用获取数据的 mysql 查询来执行此操作?这比用 php foreaches 做要简单得多。SELECT&nbsp;*&nbsp;FROM&nbsp;`TABLE`&nbsp;WHERE&nbsp;`time`&nbsp;>&nbsp;DATE_SUB(NOW(),&nbsp;INTERVAL&nbsp;30&nbsp;MINUTE)&nbsp;AND&nbsp;`time`&nbsp;<&nbsp;DATE_ADD(NOW(),&nbsp;INTERVAL&nbsp;30&nbsp;MINUTE)为您的案例更新一个古怪的解决方案:SELECT&nbsp;*&nbsp;from&nbsp;TableName&nbsp;where&nbsp;CONCAT(date,&nbsp;'&nbsp;',&nbsp;time)&nbsp;between&nbsp;DATE_SUB(NOW(),&nbsp;INTERVAL&nbsp;30&nbsp;MINUTE)&nbsp;and&nbsp;DATE_ADD(NOW(),&nbsp;INTERVAL&nbsp;30&nbsp;MINUTE)这会将日期和时间字段连接成一个日期时间。
随时随地看视频慕课网APP
我要回答