LoginSignup
7
1

Laravelの日付表示でタイムゾーン指定のアクセサをつくる

Last updated at Posted at 2023-08-22

Laravelのアクセサは便利

アクセサてなに?

データベースから取ってきたデータが予め加工されてると表示時にごちゃごちゃせんでええので、楽やん?っていう発想

こういうのが余計なコードを増やさずに簡単にできます

夏休みの終わりは2023-08-31T23:59:59+09:00です。

こう

夏休みの終わりは2023年08月31日23時59分59秒です。

そんなのmodelでちょちょいとやれば簡単さ

modelにこう指定してあげて

protected $casts = [
    'ended_at' => 'datetime:Y年m月d日H時i分s秒',
];

bladeでは

夏休みの終わりは{{ $model->ended_at }}です。

とすれば簡単にできちゃいます。

あれ?9時間違う気が・・・

夏休みの終わりは2023年08月31日14時59分59秒です。

そうです、この方式だとタイムゾーンを考慮せずになんでもかんでもUTCとして解釈されます

そこでアクセサの出番です

Laravel9からアクセサとミューテタの書き方が変わりました

use Illuminate\Database\Eloquent\Casts\Attribute;
public function endedAt(): Attribute
{
    return new Attribute(
        // アクセサ
        get: fn($value) => 
                    Carbon::parse($value)->timezone('Asia/Tokyo')->format('Y年m月d日H時i分s秒')
    );
}

こうするとあら不思議

夏休みの終わりは2023年08月31日23時59分59秒です。

便利ですね、アクセサ。ミューテタも便利ですのでぜひドキュメントを見ながら使って見てください。
https://readouble.com/laravel/9.x/ja/eloquent-mutators.html

ところで

夏休みの終わりは永遠に来ないでほしい
7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1