Site Overlay

Laravel7系でtoArrayでタイムゾーンがUTCになる

ども、なべっちです。久々の技術ネタです。

Laravel7系を使用して、CSVでのダウンロードを実装していたのですが。。

toArrayとtoJsonでタイムゾーンがUTCになり、(Asia/Tokyoから)-9時間された表示時間となって困っていました。

調べると、仕様のようで。。

https://laravel.com/docs/7.x/upgrade#date-serialization

どうやら、Model側で制御しないといけないようです。

app/Models/Traits/SerializeDate.phpを作成し、以下のように実装。

<?php

namespace App\Models\Traits;

use Illuminate\Support\Facades\Config;

trait SerializeDate
{

    /**
     * Prepare a date for array / JSON serialization.
     *
     * @param Datetime $date
     * @return string
     */
    protected function serializeDate($date)
    {
        return $date->setTimezone(Config::get('app.timezone', 'Asia/Tokyo'));
    }
}

toArray、toJsonするモデルで、use SerializeDate;を追加して使用すれば解決しました。

以上!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です