ども、なべっちです。久々の技術ネタです。
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;を追加して使用すれば解決しました。
以上!!