タイムゾーンに呪われる前に深入りしなかった
2024-01-02 記載
概要 : Laravelでタイムゾーンを設定する
Keyword : タイムゾーン, Laravel, Asia/Tokyo
Laravelの最低限の設定は.envファイルのみでよいと思っていましたが、config/app.phpも必要でした。
というのも開設した掲示板で、
Model
$table->timestamps();
と定義したカラムが9時間ずれてしまうので。
ググっていたら「タイムゾーン呪いの書」
https://qiita.com/dmikurube/items/15899ec9de643e91497c
というのを知ってしまい、タイムゾーンの奥の深さを教えられました。
まぁそれはよいとして、ChatGPT君にきいて
Laravelのタイムスタンプ(timestamps)を正しいタイムゾーンで表示するためには、
Laravelの設定ファイルであるconfig/app.phpを使用して
タイムゾーンを設定することができます。
'timezone'という項目を探します。
おそらく'timezone' => 'UTC',のように設定されているかもしれません。
'timezone' => 'Asia/Tokyo',のように日本のタイムゾーンに設定します。
と教わりましたので、関係するところなどもあわせて修正。
//'timezone' => 'UTC',
'timezone' => 'Asia/Tokyo',
//'locale' => 'en',
'locale' => 'jp',
//'fallback_locale' => 'en',
'fallback_locale' => 'jp',
//'faker_locale' => 'en_US',
'faker_locale' => 'ja_JP',
で、あっさり9時間が補正されました。
過去書き込みの日付も。
ということはデータベースの内部データはUNIXタイムで、読み出し側が自身で補正するということですね。
MariaDB、PDO、Eloquent、Laravel-Model、Laravel-Controller
と多層のレイヤーが重なっているので、どこが地域時差補正を面倒みてくれるのかわかりません。これも考えはじめると奥が深そうです。