You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:50:46