Laravel 项目使用 Carbon 人性化显示文章发表时间

Laravel tytrock ⋅ 于 2017-06-21 16:23:49 ⋅ 3034 阅读
  • 比如说有这样一个需求:一篇文章的发表时间:

距离现在时间================>显示格式

小于1小时 ===================>xx分钟前

1小时-24小时=================>xx小时前

1天-10天=====================>xx天前

大于10天=====================>直接显示日期

  • 针对这样的需求,可以利用 Carbon 的尝试下面的解决方案:

首先:

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

public function boot(){

   \Carbon\Carbon::setLocale('zh');
}

第二:

Article的 Model 中添加下面的方法:(Laravel 项目已默认安装了此包,所以不需要用 composer 安装它了。

只需要添加命名空间引用就好了:use Carbon\Carbon;

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 }}; // 视图中直接显示


本帖已被设为精华帖!
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter