laravel 学习 2018年2月27日

\Carbon\Carbon 是一个时间转换类,继承了DateTime,diffForHumans是一个比较有用的函数,主要功能是根据当时时间与指定时间的时间差.规格如下:

**距离现在时间**               **显示格式**
      < 1小时                          xx分钟前

    1小时 – 24小时                 xx小时前

      1天 – 15                        xx天前

      > 15                          直接显示日期

第一步:本地化 Carbon。在 AppServiceProvider 的 boot 方法中添加 Carbon::setLocale('zh')

use Carbon\Carbon;

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

繁体中文的设置是 Carbon::setLocale('zh-TW'),语言配置文件可在 vendor/nesbot/carbon/src/Carbon/Lang 文件夹下找到。

第二步:在 Model 中设定要人性化显示的字段。以 Article Model 的 created_at 字段为例。

use Carbon\Carbon;

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

    return Carbon::parse($date)->diffForHumans();//这里的$date是字符串时间形式而不是时间戳
}

下面就可以直接使用了。

$article->created_at; // 1秒前

如果是时间戳形式,可以使用以下形式进行输出:

$news = News::find(1);//这里必须使用Eloquent ORM形式
Carbon::parse($news->created_at->format('Y-m-d H:i:s'))->diffForHumans()//format函数只支持ORM形式的时间类型