如何配置Laravel模型日期转换让created_at输出「2小时前」格式?
Laravel 实现访问 created_at 直接返回相对时间
Laravel 的 $casts 特性无法直接实现你要的「相对时间」输出,因为它的核心作用是将数据库字段转换为特定数据类型(比如 Carbon 日期实例),而相对时间属于日期的格式化输出逻辑,不属于类型转换范畴。
要实现访问 $post->created_at 直接得到类似「2 hours ago」的结果,你需要使用**访问器(Accessor)**来重写该属性的返回值:
在你的 Post 模型中添加以下代码:
/** * 获取格式化后的创建时间(相对时间) */ public function getCreatedAtAttribute($value) { return \Carbon\Carbon::parse($value)->diffForHumans(); }
添加后,当你执行 $timepassed = $post->created_at; 时,就能直接得到相对时间字符串。
如果之后还需要使用原始的 Carbon 日期实例进行其他操作,可以自定义一个新属性(比如 created_at_raw)并通过 $casts 转换:
protected $casts = [ 'created_at_raw' => 'datetime', ];
此时访问 $post->created_at_raw 就能拿到 Carbon 实例,而 $post->created_at 则返回相对时间。
内容的提问来源于stack exchange,提问作者Surya Neupane
相关产品推荐
相关产品推荐

