Laravel時間顯示問題,我想讓時間這樣顯示:
比如:一篇文章的發表時間:
**距離現在時間** **顯示格式**< 1小時 xx分鐘前1小時-24小時 xx小時前 1天-10天 xx天前>10天 直接顯示日期
應該怎麼做呢?
回複內容:
Laravel時間顯示問題,我想讓時間這樣顯示:
比如:一篇文章的發表時間:
**距離現在時間** **顯示格式**< 1小時 xx分鐘前1小時-24小時 xx小時前 1天-10天 xx天前>10天 直接顯示日期
應該怎麼做呢?
Laravel 本身有對 Carbon 的完美支援,巧妙的利用就可以達到很好的效果:
首先:
在你的app/Providers/AppServiceProvider.php
中添加\Carbon\Carbon::setLocale('zh');
這一行到boot()
方法當中,(為了中文化顯示)
public function boot() { \Carbon\Carbon::setLocale('zh'); }
第二:
在Article
的 Model
中添加下面的方法:
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
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); }}