laravel 中 d/m/y 格式的日期格式无效问题

Posted

技术标签:

【中文标题】laravel 中 d/m/y 格式的日期格式无效问题【英文标题】:Invalid date format issue in laravel for d/m/y format 【发布时间】:2022-01-03 11:39:40 【问题描述】:

在我的 laravel 应用程序中,我有一个输入字段来插入出生日期,

我的日期格式必须是 d/m/y,我的年龄限制必须是 18-70

在我的控制器的 store 方法中,我有以下 dob 验证规则。

'date_of_birth'=>['required','bail','date','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');
                    

                ,]

但每次我尝试使用正确日期(如23/12/1995)提交表单时,它一直说日期格式无效

【问题讨论】:

Carbon::createFromFormat('d/m/y') 中的年份应为大写 'd/m/Y' 还是不行 'date_format:d/m/y Y 也应该是大写的。这是因为 php 使用大写的 Y 作为年份 @VolkaDimitrev 尝试 Carbon::createFromFormat('d/m/Y','10/10/1990')->diff(now())->format('%y') 或arbon::createFromFormat('d/m/Y','10/10/1990')->diff(now())->y @JohnLobo 仍然无效 【参考方案1】:

您的代码有两个问题:

1- 您应该从验证中删除“日期”,因为您传递的是字符串而不是日期。

2- 您应该将格式更正为正确:'d/m/Y' Y 是大写字母。

 $rules = ['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');
            

        ,
            ]];

【讨论】:

【参考方案2】:

在函数中使用format方法

$age=Carbon::createFromFormat('d/m/y', $value)->diff(Carbon::now())->format('%y');

【讨论】:

不工作

以上是关于laravel 中 d/m/y 格式的日期格式无效问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel如何更改列表中的日期格式

MAX日期的Laravel子查询-与父级的子查询链接中的日期时间格式无效

验证模型表单日期字段时,Django 期望格式错误

为啥 '%d-%m-%Y' 格式总是返回 NULL?

ValueError:时间数据“0”与格式“%d/%m/%Y”不匹配

在 pandas 中应用日期时间格式进行排序