66

Laravel 4を使用してプロジェクトを作成しています。

私は現在コメントセクションを作成しており、Facebookの「10分前」「2週間前」などのように、投稿が作成された時間を表示したいと考えています.

少し調べてみたところ、Carbonというパッケージでこれができることがわかりました。

Laravelのドキュメントを読んだ後、次のように書かれています:

デフォルトでは、Eloquent はcreated_atupdated_at、および deleted_at列を のインスタンスに変換しますCarbon。これにより、さまざまな便利なメソッドが提供され、ネイティブ PHPDateTime クラスが拡張されます。

しかし、作成した日付列を返すと、Facebook のように表示されません。

私が使用しているコードは次のとおりです。

return array('time');

私が必要とすることをするのに手を貸してくれるこのCarbonパッケージを使用した体はありますか?私はかなり混乱しています.

4

5 に答える 5

150

デフォルトでは、Eloquentはcreated_at、updated_at、およびdeleted_at列をCarbonのインスタンスに変換します。したがって、コードは次のようになります。

$comment->created_at->diffForHumans();

とても良いですね。2 minutes agoorのような文字列を生成します1 day ago。複数形または単数形、秒、分、時間、日、週、または年が自動的に実行されます。Laravel バージョン 4.1.24 でテストしました。

于 2014-05-22T09:11:00.063 に答える
116

Carbon のドキュメントを読んで必要なものを取得する場合は、diffForHumans()メソッドを呼び出します。

<?php echo \Carbon\Carbon::createFromTimeStamp(strtotime($comment->created_at))->diffForHumans() ?>
于 2013-06-23T11:47:41.473 に答える
2

しばらく前にこのコードを使用してください:

    public function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
         'y' => 'year',
         'm' => 'month',
         'w' => 'week',
         'd' => 'day',
         'h' => 'hour',
         'i' => 'minute',
         's' => 'second',
     );
     foreach ($string as $k => &$v) {
         if ($diff->$k) {
             $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
         } else {
             unset($string[$k]);
         }
     }

     if (!$full) $string = array_slice($string, 0, 1);
     return $string ? implode(', ', $string) . ' ago' : 'just now';
 }
于 2016-03-22T08:41:20.427 に答える