こんちには、フリーの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の日付の型がtimestampになっていました。
timestampの場合、mysqlから取得する際にタイムゾーンで指定した表記に変更されるようです。
デバッグ表示すると日本のタイムゾーンに変更された日付にはなっています。

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

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