LaravelのCarbonが返す現在時刻のtimezoneが、設定と異なっていたので調査

config/app.phpでtimezoneを'Asia/Tokyo'に設定しているにも関わらず、Carbon::now()をそのままレスポンスとして返すと'UTC'で返す謎バグに遭遇したので調査してみた

laravelのcontroller通してdate_default_timezone_get()すると"Asia/Tokyo"だけど、
普通のphpファイル作ってconsoleからphpファイル実行すると"UTC"
めっちゃ怪しい挙動してる

多分、Laravel上で動かした場合は基本的にconfig/app.phpのtimezone使うようになってるんだろうけど、その上書きタイミングがCarbon::now()しただけだと走らないんだと思う。
だからデフォルトのUTCで入ってきちゃってる雰囲気

基本的にphp.iniのdate.timezoneを見るはず
チェックしてみたら予想通りそっちのtimezoneは未指定だったので、ここ"Asia/Tokyo"にすればいけるのでは?

まじか駄目じゃん…
普通のphpファイルでdate_default_timezone_get()した場合"Asia/Tokyo"になってるけど、Laravelから直接Carbon::now()を返した場合はやっぱUTCだ
CarbonのデフォルトがUTCで上書きタイミングが間に合ってないとかそういう話なのか…?

php artisan tinker使ってCarbon\Carbon::now()すると"Asia/Tokyo"で現在時刻出るな…
コントローラーが原因なような気がしてきた
コントローラー経由で直接Carbon::now()を返すとUTCになっている感じなので
でもコントローラーでtimezoneいじるってどういうことだ?意味がわからん

駄目だな、こりゃわからん
バニラのLaravel作ってみてそっちでも問題起きるか確認したいところなんだけど、ちょっと時間が押してるのでここまでかなという
関係あるかなーと思ってnew Carbon()からインスタンス作って->now()してみたけどこれも駄目だったし、マジで謎
timezone指定しても駄目だったし、この環境の問題な気がしまくりですね。検証したいが時間がないということでここまでで