概要
記事一覧を作る際には「投稿日」を表示することが一般的です。
当ブログの記事一覧でも↓のように表示されています。
しかし、サービスによっては日付をそのまま表示するのではなく、「〜前」という表示をしたいケースもあります。
今回の記事では、年月日のデータを「〜前」と表示する方法を解説します。
前提
以下のようなarticles(記事)テーブルがあるとします。
※()内はデータ型
・id (int)
・title(varchar)
・created(datetime)
コード
src/controller/ArcitlesController.php
// src/Controller/ArticlesController.php
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
public function index()
{
// 記事一覧を取得
$articles = $this->Articles->find('all');
// ビューに渡す
$this->set(compact('articles'));
}
}
templates/Articles/index.php
<h1>Articles</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Created</th>
</tr>
</thead>
<tbody>
<?php foreach ($articles as $article): ?>
<tr>
<td><?= $article->title ?></td>
// 日時差を計算して表示する。
<td><?= calculateTimeDifference($article->created) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php
use Cake\I18n\FrozenTime;
//日時差を計算する関数
function calculateTimeDifference(FrozenTime $date)
{
$currentDateTime = FrozenTime::now();
$timeDifference = $currentDateTime->diff($date);
if ($timeDifference->y > 0) {
$timeDifferenceString = sprintf("%d年", $timeDifference->y);
} else if ($timeDifference->m > 0) {
$timeDifferenceString = sprintf("%dヶ月", $timeDifference->m);
} else if ($timeDifference->d > 0) {
$timeDifferenceString = sprintf("%d日", $timeDifference->d);
} else if ($timeDifference->h > 0) {
$timeDifferenceString = sprintf("%d時間", $timeDifference->h);
} else if ($timeDifference->i > 0) {
$timeDifferenceString = sprintf("%d分", $timeDifference->i);
} else {
$timeDifferenceString = "0分";
}
return $timeDifferenceString . "前";
}
?>
これで日時が「〜前」という形で表示されます。
以下のように表示となります。
・1年以上前・・・〜年前
・1ヶ月以上前・・・〜ヶ月前
・1日以上前・・・〜日前
・1時間以上前・・・〜時間前
・1分以上前・・・〜分前
・それ以下・・・0分前
コメント