最终效果,点击搜索后,前端页面显示符合这个时间区间的数据。
这里讲一下大概思路:
1,前端使用layui.date 组件。
<div class="layui-inline">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="test-laydate-range-date-1" name="created_at" placeholder="请输入创建起始时间">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">完成时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="test-laydate-range-date-2" name="updated_at" placeholder="请输入完成起始时间">
</div>
</div>
//日期范围
laydate.render({
elem: '#test-laydate-range-date-1'
,type: 'datetime'
,format:'yyyy-MM-dd HH:mm:ss'
,range: true
});
//日期范围
laydate.render({
elem: '#test-laydate-range-date-2'
,type: 'datetime'
,format:'yyyy-MM-dd HH:mm:ss'
,range: true
});
2,在使用时间范围组件后,点击搜索,会生成 “2019-06-01 00:00:00 - 2019-06-30 00:00:00“这种格式的数据,当然这样的数据格式不是我们想要的。我最终想要拼成的SQL语句是:
"SELECT * FROM `order` WHERE `created_at` BETWEEN '2019-06-20 00:00:00' AND '2019-08-05 00:00:00';“
这时,就必须在后端对数据进行处理了。
处理方式如下:
$created_at=$request->param('created_at');
$created_at[20]=',';
$created_at=explode(',', $created_at); //这个变量的打印结果:['2019-06-01 00:00:00','2019-06-30 00:00:00'];
if (isset($created_at) && is_array($created_at)){
$arr[]=['created_at','between',$created_at];
}
$list=OrderModel::where($arr)->select(); //此时查看日志生成的SQL是
“SELECT * FROM `order` WHERE `created_at` BETWEEN '2019-06-20 00:00:00' AND '2019-08-05 00:00:00';”没毛病。