如何在Laravel中通过daterangepicker获取daterangepicker_start/end参数
解决方案:直接传递daterangepicker的起始/结束日期参数
没问题,我来帮你搞定这个需求!要让表单直接传递daterangepicker_start和daterangepicker_end这两个独立参数,只需要做三个小改动,一步步来:
1. 在表单中添加隐藏输入框
首先,你需要在现有的表单里新增两个隐藏输入字段,用来分别存储起始日期和结束日期的值。修改你的Blade模板代码:
{!! Form::open(['method' => 'GET', 'route' => ['user-mangement.index'],'class' => 'form-material text-right col-6 p-r-20']) !!} {{ Form::text('daterange',null,['placeholder' => '选择日期范围' ,'class' => 'form-control input-daterange-datepicker col-6' ]) }} <!-- 新增两个隐藏输入框,用于存储单独的日期参数 --> {{ Form::hidden('daterangepicker_start', null, ['id' => 'daterangepicker_start']) }} {{ Form::hidden('daterangepicker_end', null, ['id' => 'daterangepicker_end']) }} {{ Form::button('<i class="fa fa-search"></i>', ['type' => 'submit', 'class' => 'btn btn-sm btn-inverse waves-effect waves-light m-r-15'] ) }} {!! Form::close() !!}
2. 修改JS代码,添加日期选择回调
接下来,给daterangepicker添加apply.daterangepicker事件监听,当用户确认选择日期范围后,把选中的起始和结束日期赋值给刚才的隐藏输入框:
<script> $(function() { $(".input-daterange-datepicker").daterangepicker({ locale: { format: 'YYYY/DD/MM' }, }).on('apply.daterangepicker', function(ev, picker) { // 将选中的日期按指定格式赋值给隐藏输入框 $('#daterangepicker_start').val(picker.startDate.format('YYYY/DD/MM')); $('#daterangepicker_end').val(picker.endDate.format('YYYY/DD/MM')); }); }); </script>
这里的核心是利用daterangepicker的apply事件,在用户确认日期选择后,通过picker.startDate和picker.endDate获取日期对象,再转成和你配置一致的格式,同步到隐藏域中。
3. 在控制器中直接获取参数
现在表单提交后,你就可以在控制器里直接拿到这两个独立的日期参数了:
public function index(Request $request) { $s = $request->input('s'); // 直接获取起始和结束日期参数 $startDate = $request->input('daterangepicker_start'); $endDate = $request->input('daterangepicker_end'); // 原有的daterange参数依然可以获取,按需保留即可 $daterange = $request->input('daterange'); // 示例:添加日期范围筛选逻辑(根据你的实际业务调整) $users = User::sortable(['created_at' => 'desc']) ->search($s) ->when($startDate && $endDate, function($query) use ($startDate, $endDate) { return $query->whereBetween('created_at', [$startDate, $endDate]); }) ->paginate(10); return view('backend/user/index',compact('users', 'startDate', 'endDate')); }
这样就不用再手动拆分daterange字符串了,直接拿到两个独立的日期参数,用起来更灵活!
内容的提问来源于stack exchange,提问作者TryHardz
相关产品推荐
相关产品推荐

