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

如何在Laravel的FormRequest中验证2024-09-06T06:58:19.326Z格式的日期?

Laravel FormRequest 验证ISO8601格式日期解决方案

你遇到的问题源于之前的验证格式字符串与目标日期不匹配,以下是几种可行的解决方法:

方法一:严格匹配目标格式

目标日期2024-09-06T06:58:19.326Z包含3位毫秒,对应日期格式占位符v(u是6位微秒,与目标格式不匹配),正确的验证规则如下:

public function rules()
{
    return [
        'Date' => 'required|date_format:Y-m-d\TH:i:s.v\Z',
    ];
}

方法二:宽松验证(兼容更多ISO8601格式)

如果不需要严格限定毫秒位数,Laravel的date规则可通过Carbon直接解析该格式,无需指定具体格式:

public function rules()
{
    return [
        'Date' => 'required|date',
    ];
}

方法三:自定义闭包验证

若需强制验证为UTC时区等更灵活的逻辑,可使用闭包规则:

use Carbon\Carbon;

public function rules()
{
    return [
        'Date' => [
            'required',
            function ($attribute, $value, $fail) {
                $date = Carbon::parse($value);
                if (!$date->utc()->isValid()) {
                    $fail('The :attribute must be a valid UTC date in ISO 8601 format.');
                }
            },
        ],
    ];
}

之前验证失败的原因

  • 第一个规则使用Y-m-d\TH:i:s.u\Z:u对应6位微秒,但目标日期仅为3位毫秒,格式不匹配。
  • 第二个规则使用date_format:Y-m-d:仅验证日期部分,忽略了后续的时间和时区信息,整个字符串不符合该格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:32:42