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

Laravel中提交d/m/y格式日期提示无效格式问题如何解决

Laravel出生日期验证格式错误排查方案

核心问题原因

  1. 日期格式符匹配错误
    PHP日期格式规范中,小写y仅匹配2位数字年份(如1995年对应95),你需要验证的是4位年份(如1995),应该使用大写格式符Y。你当前写的date_format:d/m/y只能匹配23/12/95这类输入,提交23/12/1995自然会触发格式错误。
  2. 验证规则冲突
    你同时使用了date和date_format两个规则,Laravel的date规则会优先调用strtotime解析日期,d/m/Y格式在strtotime逻辑中会被误识别为m/d/Y,只要日期中的日大于12就会直接解析失败,不会走到后续的date_format验证环节,这两个规则同时使用属于冗余配置。

修复后的验证代码

你可以直接替换原有规则,同步修改闭包内Carbon解析的格式符即可:

'date_of_birth' => [
    'required',
    'bail',
    'date_format:d/m/Y',
    function ($attribute, $value, $fail) {
        $age = Carbon::createFromFormat('d/m/Y', $value)->diff(Carbon::now())->y;
        if($age < 18 || $age > 70) {
            $fail('Âge invalide. l\'âge devrait être 18-70');
        }
    },
]

可选优化方案

你也可以直接使用Laravel内置的日期范围规则,不需要自定义闭包实现年龄限制:

'date_of_birth' => [
    'required',
    'bail',
    'date_format:d/m/Y',
    'before:' . now()->subYears(18)->format('d/m/Y'),
    'after:' . now()->subYears(70)->format('d/m/Y'),
]

如果修改后依然报错,你可以打印请求中的date_of_birth参数值,确认前端提交的内容没有额外空格、特殊字符,分隔符确实为/即可。

内容的提问来源于stack exchange,提问作者Volka Dimitrev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:09