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

Laravel中如何在表单与视图中获取格式化后的时间字段?

解决Laravel中时间字段的格式化显示问题

看起来你已经搞定了日期字段date_seance的格式化,但start_time和end_time还没达到预期效果对吧?别担心,这里有几种简单的方案帮你实现把时间显示成20:00这样的格式:

方案1:让模型把时间字段转为Carbon实例(最基础的方法)

你的Course模型里注释掉了$dates属性,把它打开就可以让Laravel自动把start_time和end_time转换成Carbon实例,这样就能像date_seance一样调用format()方法了:

class Course extends Model {
    protected $dates = ['date_seance', 'start_time', 'end_time'];
}

然后在你的index.blade.php视图里,直接对时间字段调用format('H:i')即可:

@foreach($course as $item)
<tr>
    <td> {{$item->date_seance->format('d/m/Y') }}</td>
    <td> {{$item->start_time->format('H:i') }}</td>
    <td> {{$item->end_time->format('H:i') }}</td>
@endforeach

方案2:使用模型访问器(更优雅,复用性强)

如果不想每次在视图里都写format('H:i'),可以给模型添加访问器,自动处理格式化逻辑:

在Course模型里添加两个访问器方法:

class Course extends Model {
    protected $dates = ['date_seance', 'start_time', 'end_time'];

    // 格式化开始时间
    public function getFormattedStartTimeAttribute()
    {
        return $this->start_time->format('H:i');
    }

    // 格式化结束时间
    public function getFormattedEndTimeAttribute()
    {
        return $this->end_time->format('H:i');
    }
}

之后在视图里直接调用自定义的属性名即可,代码更简洁:

@foreach($course as $item)
<tr>
    <td> {{$item->date_seance->format('d/m/Y') }}</td>
    <td> {{$item->formatted_start_time }}</td>
    <td> {{$item->formatted_end_time }}</td>
@endforeach

方案3:使用字段类型转换(Laravel 5.6+推荐)

如果你希望从模型获取时间字段时直接得到格式化后的字符串,可以用$casts属性指定格式,这样就不需要手动调用format()了:

class Course extends Model {
    protected $casts = [
        'date_seance' => 'date:d/m/Y', // 日期直接格式化
        'start_time' => 'datetime:H:i',
        'end_time' => 'datetime:H:i',
    ];
}

这时候视图里直接输出字段即可:

@foreach($course as $item)
<tr>
    <td> {{$item->date_seance }}</td>
    <td> {{$item->start_time }}</td>
    <td> {{$item->end_time }}</td>
@endforeach

⚠️ 注意:用$casts指定格式后,字段返回的是字符串而不是Carbon实例,如果之后还需要对时间做其他Carbon操作(比如计算时间差),建议还是用方案1或方案2。

表单中显示格式化时间

如果是在编辑表单里要显示格式化后的时间(比如用type="time"的输入框),可以这样写:

<div class="form-group">
    <label>开始时间</label>
    <input type="time" name="start_time" class="form-control" value="{{ old('start_time', $course->start_time->format('H:i')) }}">
</div>

这样既会回显旧的输入值(验证失败时),也会默认显示格式化后的时间。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:09:48