参考サイト:
https://teratail.com/questions/301738
上記問題に遭遇しました。
php.ini app.php など設定系は、全部大丈夫なのですが
DBから取ってきたDATE型をなにがしかに変換する際にUTCになってしまってました。
原因分からず。
※date関数などでDB以外から生成した変数は大丈夫なのです。
自分の対応としては以下としました。
↑のベストアンサーとなりますが、以下で解決いたしました。
が、あまりいけてないと思うので、
もし下記プログラムを書かなくても設定系で直るならご教示願いたいです。
protected function serializeDate(DateTimeInterface $date) { return $date->format('Y-m-d H:i:s', 'Asia/Tokyo'); }
#DBから取得したとき
$dao->createのレスポンスをそのままログ出力
'created_at' => '2021-09-08 02:17:49',
#DBから取得した日付データを調査
※$dao->createのレスポンスをtoArray()したデータを操作
\Log::debug("DBの時刻データ:".var_export(date_create($info['created_at']), true)); \Log::debug("DBの時刻から変換:".var_export(date_format(date_create($info['created_at']), 'Y-m-d H:i:s'), true)); \Log::debug("DBの時刻から変換2:".var_export(date_create($info['created_at'])->getTimezone()->getName(), true)); \Log::debug("DBデータ:".var_export($info, true));
#結果
DBの時刻データ:DateTime::__set_state(array( 'date' => '2021-09-07 17:17:49.000000', 'timezone_type' => 2, 'timezone' => 'Z', )) DBの時刻から変換:'2021-09-07 17:17:49' DBの時刻から変換2:'Z' DBデータ:array ( 'created_at' => '2021-09-07T17:17:49.000000Z', )
- timezone_type = 2 が America らしい
- timezone = Z って・・・
- DBデータを出力しただけで、なんでこの形式になるのかな!?
#timezone設定系
DB
show variables like '%time_zone%'; Variable_name Value system_time_zone JST time_zone SYSTEM
#PHP
date date/time support enabled timelib version 2020.02 "Olson" Timezone Database Version 0.system Timezone Database internal Default timezone Asia/Tokyo Directive Local Value Master Value date.default_latitude 31.7667 31.7667 date.default_longitude 35.2333 35.2333 date.sunrise_zenith 90.833333 90.833333 date.sunset_zenith 90.833333 90.833333 date.timezone Asia/Tokyo no value
#app.php
'timezone' => 'Asia/Tokyo', 'locale' => 'ja',
#環境
Laravel Framework 8.33.1
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS )