CakePHPで日付のタイムゾーンが変更されない

こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。

CakePHPで開発していて、mysqlから取得した日付を画面表示しようとしたところ、うまくできなかったので紹介します。

使用環境

PHP 7.3.1

CakePHP 3.8

MySQL 5.7.25

MAMP

Mac

現象

MySQLに登録されている日付は現在日時となっているのに、

CakePHPで取得・表示すると9時間前(タイムゾーンがUTCの時間)になっている。

ちなみに、app.config、PHP.iniのタイムゾーンは日本に変更しています。

MySQLの値
CakePHPの表示

原因

MySQLの日付の型がtimestampになっていました。

timestampの場合、mysqlから取得する際にタイムゾーンで指定した表記に変更されるようです。

デバッグ表示すると日本のタイムゾーンに変更された日付にはなっています。

クエリオブジェクトの中身

解決策

MySQLの型をdatetimeに変更すれば保存されている日付で表示することができました。

datetime型に変更後

まとめ

MySQLには他にもいろいろデータ型があるので、しっかり勉強して余計な時間を使わないようにしたいものです。。。

コメント

タイトルとURLをコピーしました