【Laravel】Eloquentモデルの日付をフォーマットする

こんにちは。今回はアプリ開発で頻出の「日付のフォーマット処理」を解説します。Eloquentを使用するといい感じに便利に出来ますので皆さんお試しください。

Eloquentモデルに日付フォーマットを設定する

Eloquentに日付型の項目の標準書式を登録することができます。この機能を使うとモデルの日付項目を統一することができます。

書式を設定せずにupdated_atを取得すると以下の書式で取得できます。

 updated_at: "2021-07-31 05:18:34"

このまま使うことももちろん出来ます。しかしアプリの要件で、日付はスラッシュ区切り(例2021/08/09)で表示するルールで統一されていたとしたら、書式を変換しなくてはなりません。

このような場合、取得する度に1項目ずつフォーマット処理するのは大変です。そこで、Eloquent使うと標準の日付を設定することができます。EloquentモデルのクラスでserializeDateメソッドをオーバーライドします。引数の$dateを任意の書式に変換してreturnするだけです。非常に簡単ですね。

protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y/m/d');
}

結果をtinkerで確認してみましょう。

>>> User::find(1)->toArray();
=> [
     "id" => 1,
     "name" => "joe",
     "email" => "joe@xxx.xxx",
     "email_verified_at" => null,
     "password" => "",
     "remember_token" => null,
     "created_at" => null,
     "updated_at" => "2021/07/31",
     "deleted_at" => null,
   ]

updated_atがスラッシュ区切りになっていることが確認できました。

この書式変換ですか、あくまで取得する場合のみ有効になります。登録、更新時にスラッシュ区切りにして渡さないと登録できないなんてことはありませんので安心ください。

まとめ

Eloquentを使って日付の書式を設定する方法を解説しました。手作業で変換するのは大変だし、漏れも発生します。このように一括で設定できるのは大きなメリットだと思います。皆さんも是非活用してみてください。

Laravel

Posted by kobainmac