CakePHPで XSERVERの MySQLに日時を日本標準時で保存する設定

この赤枠はエンジニアの血で囲っています

個人で Webサービスを開発

しばらく更新が滞っていたのは個人で Webサービスを開発していたからです。趣味性が極めて高いサービスのためここでは公開しませんが、そのサービスのコア部分は土日の 2日程度で開発し見た目などを平日 5日間で調整した感じです。

動作環境(XSERVER側)
  1. Apache 2.4.6
  2. PHP 7.2.6
  3. CakePHP 3.7
  4. MySQL 5.7.x
改めて CakePHPの開発効率の高さを実感じました。そんな中でもいつくかつまずいた点があったので共有していきたいと思います。

MySQLに保存される日時が…

その Webサービスは MySQLにデータの生成日時や更新日時を保存するのですが、CakePHPの既定の設定のままだと 9時間前の日時が保存されてしまいます。この「9時間前」は開発者ならおなじみの協定世界時(UTC)と日本標準時(JST)との時差ですね。そこで CakePHPのタイムゾーンの設定を日本標準時(JST)に変更する事にしました。

Googleで検索すると…

Googleで CakePHPのタイムゾーンの設定について検索すると下記の設定を書き換える方法が多く表示されます。

config\app.php

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'timezone' => 'Asia/Tokyo',
しかし、この設定は XSERVERでは使えません。この設定で CakePHPを実行するとエラーが発生します。

XSERVERで利用する場合

XSERVERでタイムゾーンの設定を変更する場合は同じ config/app.phpの別の場所を変更します。

config\app.php

'App' => [
    'namespace' => 'App',
    'encoding' => env('APP_ENCODING', 'UTF-8'),
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
    'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'JST'),
こちらの設定変更だけで前記の「Datasources」の方は「UTC」のままでも日本標準時で MySQLに日時が保存されるようになります。

参考にした記事

参考 CakePHP3.6.2 のタイムスタンプ調整 (XSERVER の場合)加藤 正人|株式会社パルムゲート

1 COMMENT

現在コメントは受け付けておりません。