2020-08-03 18:39:00
围观(4622)
在使用 ThinkPHP6 框架的时候, 如果使用数组拼接条件再使用 ORM 查询数据, 会有一种这样的情况:
假如需要筛选数据的 create_time(创建时间) 为大于 2020-08-03
数组是这样写的:
$where = []; $where[] = ['create_time', '>=', '2020-08-03'];
可能和字段类型是 datetime 有关会出现无法筛选.
而这样可以正常筛选:
$where[] = ['create_time', '>=', '2020-08-03 00:00:00'];
而博主拿到的需求是: 获取前端传值 start_time(开始时间) 和 end_time(结束时间) 去筛选数据.
且前端传值是不会精准到时分秒的, 只会传两个值, 例如: 2020-08-03 , 2020-09-03.
所以后端在筛选的时候需要将这两个日期加上这一天的开始和结束时间.
博主写的解决方法:
function dateStartEnd($date) { $time = strtotime($date); if (!$time) { return false; } $date = date('Y-m-d', strtotime($date)); $time = strtotime($date); $start_date_time = date('Y-m-d H:i:s', $time); $end_time = $time + ( 24 * 60 * 60 -1 ); $end_date_time = date('Y-m-d H:i:s', $end_time); return [ 'start_date_time' => $start_date_time, 'end_date_time' => $end_date_time, ]; }
调用方法测试:
$data = dateStartEnd('2020-08-03'); echo json_encode($data); // 获取准确的开始或结束时间可以这样: // var_dump($data['start_date_time']); // var_dump($data['end_date_time']);
返回:
{ "start_date_time": "2020-08-03 00:00:00", "end_date_time": "2020-08-03 23:59:59" }
有时候, 可能前端把精确到时分秒的数据也传值过来了, 当然使用本方法也是不会受影响的. 例如:
$data = dateStartEnd('2020-08-03 11:00:00'); echo json_encode($data);
返回结果同上.
这个方法考虑了其他一些情况, 如果前端传值的时间格式根本不对:
$data = dateStartEnd('2020-08-03 11'); echo json_encode($data);
此时只会返回 false.
本文地址 : bubaijun.com/page.php?id=203
版权声明 : 未经允许禁止转载!
上一篇文章: PHP将数据(数组)按月份分组
下一篇文章: 原生PHP使用GD库压缩图片及增加水印