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

Laravel Eloquent日期字段转换指定格式失效,原因何在?

问题原因及解决办法

原因

你在模型$casts里写的'some_date' => 'date:d-m-Y'是错误用法——Laravel的casts系统中,date类型的作用是把字段转换为Carbon日期实例,并不支持在类型后直接追加格式字符串。

框架无法识别这种非法的类型定义,会退回到默认的日期时间解析逻辑,把SQL Server的date字段当成带时间的类型处理,因此自动补全了不存在的00:00:00时间部分,格式也保持默认的YYYY-mm-dd。

解决办法

有两种靠谱的方式实现你要的dd-mm-YYYY格式:

方式1:单独字段用访问器

如果只需要修改some_date这一个字段的输出格式,给模型添加访问器:

use Carbon\Carbon;

public function getSomeDateAttribute($value)
{
    return Carbon::parse($value)->format('d-m-Y');
}

同时$casts可以保持为'some_date' => 'date'(或者也可以去掉,访问器会直接处理原始值)。

方式2:全局设置模型日期格式

如果希望模型所有日期字段都用这个格式输出,在模型里设置$dateFormat属性:

protected $dateFormat = 'd-m-Y';
protected $casts = [
    'some_date' => 'date',
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:20:21