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

Laravel PHP网站实现按本地电脑时间显示文章日期/发布时间

解决Laravel网站日期显示与本地时间适配问题

嘿,我来帮你搞定这两个需求!看你的代码片段,应该是在Blade模板里渲染文章发布信息对吧?咱们一步步来解决:

一、只显示日期,不显示时钟时间

Laravel的Eloquent模型默认会把created_at、updated_at这类时间字段转换成Carbon对象,比原生PHP的date()函数好用太多,你可以直接调用Carbon的方法来格式化日期:

方法1:自定义日期格式

把你现有代码改成这样就行:

<h6 class="date-comments">
    <i class="fa fa-user"></i> {{ ucwords($article->user->name) }} &nbsp;&nbsp;
    <i class="fa fa-calendar"></i> {{ $article->created_at->format('d M Y') }}
</h6>

'd M Y'会输出类似05 Oct 2024的格式,完全符合你只显示日期的需求,不用再额外用strtotime()转换。

方法2:用Carbon快捷方法

如果不需要自定义格式,也可以用Carbon内置的快捷方法:

{{ $article->created_at->toDateString() }}

这个会输出2024-10-05格式的日期,更简洁。

二、发布文章时显示用户本地电脑的日期时间

这里要注意:Laravel默认会把时间存为UTC标准时间,用户看到的本地时间需要做时区转换。推荐两种方案,优先选第一种:

方案1:后端存UTC,前端转换为本地时间(更推荐)

这是行业最佳实践,UTC时间不会有时区混乱问题,显示时交给前端转换成用户本地时间:

  1. 在Blade里输出UTC时间的ISO格式:
<h6 class="date-comments">
    <i class="fa fa-user"></i> {{ ucwords($article->user->name) }} &nbsp;&nbsp;
    <i class="fa fa-calendar"></i> 
    <span class="local-date" data-utc="{{ $article->created_at->toISOString() }}"></span>
</h6>
  1. 加一段JavaScript把UTC时间转成用户本地日期:
document.querySelectorAll('.local-date').forEach(element => {
    const utcDate = new Date(element.dataset.utc);
    // 自定义本地日期格式,和你之前的'd M Y'对应
    const localDateStr = utcDate.toLocaleDateString('en-US', {
        day: '2-digit',
        month: 'short',
        year: 'numeric'
    });
    element.textContent = localDateStr;
});

这样不管用户在哪个时区,看到的都是自己电脑上的本地日期。

方案2:发布时前端传递本地时间给后端存储

如果你想直接把用户本地时间存到数据库,可以这么做:

  1. 在发布表单里加一个隐藏字段:
<form method="POST" action="{{ route('articles.store') }}">
    @csrf
    <!-- 其他表单字段 -->
    <input type="hidden" name="local_created_at" id="local-created-at">
    <button type="submit">发布文章</button>
</form>
  1. 用JS设置隐藏字段的本地时间值:
document.getElementById('local-created-at').value = new Date().toISOString();
  1. 在控制器里接收并存储:
use Carbon\Carbon;

public function store(Request $request)
{
    $article = new Article();
    // 其他字段赋值逻辑
    $article->created_at = Carbon::parse($request->local_created_at);
    $article->save();
    
    return redirect()->route('articles.index');
}

不过这种方法要注意,不同用户的时区不同,数据库里的时间会混杂各种时区,后续统计或查询可能有麻烦,所以优先推荐方案1。

参考资料

  • Laravel官方文档中的「Carbon日期处理」章节,详细讲解了Eloquent模型的时间字段操作
  • JavaScript的Date对象相关文档,了解时区转换的具体实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:56