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

如何在Laravel Eloquent查询中将日期格式化为14:51:51 2022-03-31?

Laravel Eloquent 日期格式化方案

下面给你几种直接能用的方法,把created_at从2022-03-31T14:51:51.000000Z转换成你要的14:51:51 2022-03-31格式:

方法一:模型全局设置(一劳永逸)

直接在Comment模型里定义日期格式,所有查询返回的日期都会自动转换:

class Comment extends Model
{
    // 方式1:设置全局日期格式
    protected $dateFormat = 'H:i:s Y-m-d';

    // 方式2:单独指定字段格式(更灵活,可只改created_at)
    protected $casts = [
        'created_at' => 'datetime:H:i:s Y-m-d',
        // 如需同步修改updated_at,可添加此行
        // 'updated_at' => 'datetime:H:i:s Y-m-d',
    ];
}

改完模型后,你原来的查询代码完全不用动,返回的JSON里created_at就会是目标格式。

方法二:查询时临时格式化(单次需求)

如果不想修改模型全局配置,就在查询的select语句里直接用数据库函数格式化:

use Illuminate\Support\Facades\DB;

response()->json(
    Comment::with('user:id,username')
            ->select(
                'id', 
                'comment', 
                'user_id', 
                // MySQL用DATE_FORMAT,PostgreSQL换成TO_CHAR(created_at, 'HH24:MI:SS YYYY-MM-DD')
                DB::raw("DATE_FORMAT(created_at, '%H:%i:%s %Y-%m-%d') as created_at")
            )
            ->where('post_id', $id)
            ->orderBy('created_at', 'ASC')
            ->paginate(5)
);

方法三:自定义访问器(灵活扩展)

在Comment模型里写一个访问器,重写created_at的返回逻辑,还能额外加时区转换等操作:

class Comment extends Model
{
    public function getCreatedAtAttribute($value)
    {
        return \Carbon\Carbon::parse($value)->format('H:i:s Y-m-d');
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:46:04