Carbon 的 diffForHumans 方法,laravel的人性化日期
2019-10-06 admin laravel 1734
在博客等文章类程序中,我们需要将发布于7天内的时间,展示为几天前发布,而不是具体的日期,而超过7天的,则显示具体日期,这就需要使用Carbon 的 diffForHumans 方法来实现:
Carbon 是继承自 PHP DateTime 类 的子类,但比后者提供了更加丰富、更加语义化的 API。其中一个比较实用的 API 就是 diffForHumans 方法,几乎每个用 Laravel 构建的项目中都有用到它。
第一步:本地化 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 中设定要人性化显示的字段。以 BlogModel 的 created_at 字段为例。
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Carbon\Carbon; class BlogModel extends Model { protected $table = 'blog'; protected $fillable = [ 'title', 'tag', 'content','pinglun','views', ]; //人性化日期 public function getCreatedAtAttribute($date) { if (Carbon::now() > Carbon::parse($date)->addDays(7)) { //return Carbon::parse($date); return $date;//大于7天的时间直接返回具体日期 } return Carbon::parse($date)->diffForHumans(); } }
显示效果: