Laravel 5.5表单日期选择器如何禁用历史日期?
解决Laravel 5.5表单日期选择器禁用过往日期的问题
嘿,这个需求其实很容易实现!HTML5原生的date输入控件自带min属性,用来限制用户能选择的最小日期,咱们直接在Laravel表单生成器的参数里加上这个属性就搞定了。
基础实现:禁用所有过往日期
只需要给两个日期输入框添加min属性,值设为**今天的日期(格式为YYYY-MM-DD)**就行。Laravel里可以用date()函数或者Carbon来生成这个日期:
{!! Form::date('checkin_date', old('checkin_date'), [ 'class' => 'form-control', 'placeholder' => '', 'required' => '', 'min' => date('Y-m-d') // 或者用Carbon::today()->format('Y-m-d'),记得先引入Carbon ]) !!} {!! Form::date('checkout_date', old('checkout_date'), [ 'class' => 'form-control', 'placeholder' => '', 'required' => '', 'min' => date('Y-m-d') ]) !!}
进阶:让退房日期晚于入住日期
如果想要让退房日期必须选在入住日期之后(比如至少晚一天),可以配合JavaScript实现联动:
// 监听入住日期的变化 document.getElementById('checkin_date').addEventListener('change', function() { const checkinDate = new Date(this.value); // 计算退房的最小日期为入住日期+1天 const checkoutMinDate = new Date(checkinDate); checkoutMinDate.setDate(checkoutMinDate.getDate() + 1); // 格式化为HTML5 date控件需要的YYYY-MM-DD格式 const formattedDate = checkoutMinDate.toISOString().split('T')[0]; // 设置退房日期的min属性 document.getElementById('checkout_date').setAttribute('min', formattedDate); });
重要提醒:后端也要做验证
前端限制只是防君子,为了确保数据安全,一定要在后端的请求验证规则里加上日期校验:
// 在你的请求类或者控制器的验证逻辑里 $rules = [ 'checkin_date' => 'required|date|after_or_equal:today', 'checkout_date' => 'required|date|after:checkin_date', ];
这样前后端双重保障,就不用担心用户提交非法的过往日期啦!
内容的提问来源于stack exchange,提问作者Codefan
相关产品推荐
相关产品推荐

