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

Laravel 9自定义时间戳字段未按ISO 8601格式返回求助

解决Laravel 9自定义日期字段返回ISO8601格式问题

问题分析

默认的created_at/updated_at能返回ISO8601格式(如2022-11-16T15:02:44.000000Z),但自定义的questions_updated_at字段返回Y-m-d H:i:s格式,核心原因是Laravel没有自动识别这个自定义字段为日期类型——默认的timestamps字段是框架自动注册的日期字段,会被当作Carbon实例处理,序列化时遵循$dateFormat设置,而自定义字段需要手动声明。

解决方案

方法1:通过$dates属性声明日期字段

在你的MyClass模型中添加$dates属性,将自定义字段加入其中:

class MyClass extends Model
{
    protected $dateFormat = \DateTime::ISO8601;
    // 声明所有需要按日期格式处理的字段
    protected $dates = ['created_at', 'updated_at', 'questions_updated_at'];
}

方法2:通过$casts属性指定字段类型

也可以用$casts明确指定字段类型为datetime,效果与$dates一致:

class MyClass extends Model
{
    protected $dateFormat = \DateTime::ISO8601;
    protected $casts = [
        'questions_updated_at' => 'datetime',
    ];
}

优化填充器代码

无需手动将Carbon实例格式化为字符串,直接赋值Carbon实例即可,Laravel会自动处理存储格式:

"questions_updated_at" => Carbon::now(),
'created_at' => Carbon::now(),
"updated_at" => Carbon::now()

验证效果

修改后重新请求接口,questions_updated_at会和默认字段一致,返回ISO8601格式的日期字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:15:40