php - Laravel时间显示问题
天蓬老师
天蓬老师 2017-04-10 17:33:17
[PHP讨论组]

Laravel时间显示问题,我想让时间这样显示:

比如:一篇文章的发表时间:

**距离现在时间**      **显示格式**
< 1小时                 xx分钟前
1小时-24小时            xx小时前 
1天-10天                xx天前
>10天                   直接显示日期

应该怎么做呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
伊谢尔伦

Laravel 本身有对 Carbon 的完美支持,巧妙的利用就可以达到很好的效果:

首先:

在你的app/Providers/AppServiceProvider.php中添加\Carbon\Carbon::setLocale('zh');这一行到boot()方法当中,(为了中文化显示)

 public function boot()
    {
        \Carbon\Carbon::setLocale('zh');
    }

第二:

ArticleModel 中添加下面的方法:

  public function getCreatedAtAttribute($date)
    {
        if (Carbon::now() < Carbon::parse($date)->addDays(10)) {
            return Carbon::parse($date);
        }

        return Carbon::parse($date)->diffForHumans();
    }
   

这里注意到使用到了 Laravel 的 getXXXAttribute() 的特性,如果你是其他的字段,比如published_at,方法应该写成 getPublishedAtAttribute($date),别忘了在Article头部use Carbon\Carbon;

最后:

直接显示你的日期就好:

$article = \App\Article::find(7);

{{ $article->created_at }}; // 视图中直接显示

更多 Laravel 的讨论学习,请到我的小站:https://laravist.com

亲测: Laravel 5.1 和 5.2 都OK

伊谢尔伦

时间问题前端处理可能会对服务器压力小点,有一个moment.js你可以试一下
moment.js

PHP中文网
public function formatDate($time = 0){
    $tmp = time() - $time;
    if($tmp && $tmp <= 60 * 60){
        return ceil($tmp / 60) + 1 . '分钟前';
    }elseif($tmp > 60 * 60 && $tmp < 60 * 60 * 24){
        return ceil($tmp / 60 / 60) + 1 . '小时前';
    }elseif($tmp > 60 * 60 * 24 && $tmp < 60 * 60 * 24 * 10){
        return ceil($tmp / 60 / 60 / 24) + 1 . '天前';
    }else{
        return date('Y-m-d H:i:s',$time);
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号