如何在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
相关产品推荐
相关产品推荐

