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

如何在Blade视图中将时间列属性转换为带AM/PM的12小时制格式

解决方案

方法1:直接在Blade视图中格式化(临时使用场景)

如果只需要在当前页面修改格式,不需要复用,直接调用Carbon的format方法即可,Laravel默认会将模型中声明的日期字段转为Carbon实例:

{{ $timeEntry->time_start->format('h:i:A') }}

如果你的模型没有将time_start识别为日期字段,先手动解析时间再格式化:

{{ \Carbon\Carbon::parse($timeEntry->time_start)->format('h:i:A') }}

格式说明:h代表12小时制带前导零的小时,i代表带前导零的分钟,A代表大写的AM/PM标识,完全匹配你需要的09:51:AM格式。

方法2:模型定义访问器(多场景复用)

如果需要在多个页面使用该格式,在TimeEntry模型中定义访问器,避免重复写格式化代码:

  1. 打开app/Models/TimeEntry.php文件,添加对应方法:
// Laravel 9+ 新版本访问器写法
use Illuminate\Database\Eloquent\Casts\Attribute;

protected function timeStart(): Attribute
{
    return Attribute::make(
        get: fn ($value) => \Carbon\Carbon::parse($value)->format('h:i:A'),
    );
}

// 旧版本Laravel兼容写法
public function getFormattedTimeStartAttribute()
{
    return $this->time_start->format('h:i:A');
}
  1. Blade中直接调用即可:
{{-- 对应新版本访问器 --}}
{{ $timeEntry->time_start }}

{{-- 对应旧版本访问器 --}}
{{ $timeEntry->formatted_time_start }}

方法3:模型全局声明日期格式(全场景统一输出)

如果所有用到time_start的场景都需要使用该格式,直接在模型的$casts属性中声明输出格式:

protected $casts = [
    'time_start' => 'datetime:h:i:A',
    // 其他字段的类型转换规则
];

之后所有地方直接输出{{ $timeEntry->time_start }}都会自动转为你需要的格式。

常见问题排查

如果运行时报错Call to a member function format() on string,说明模型没有将time_start识别为日期字段,需要在模型中添加如下配置:

// Laravel 旧版本写法
protected $dates = [
    'time_start',
];

// Laravel 8+ 推荐写法,添加到$casts数组中
protected $casts = [
    'time_start' => 'datetime',
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:39:04