タイムゾーンの設定

それぞれの環境でのタイムゾーンの設定方法です。

国内だけのサービスであればJSTにするケースもありますが、世界を狙うぜ!という場合にはUTCにしておいて、表示側で調整する、なんてことが重要になってきそうです。

ミドルウェアによってはOSのタイムゾーンの設定を見ることがあるので注意が必要です。

Docker

Dockerによりマシンを立ち上げるとUTCになっているので変更します。

$ docker exec -it webhost bash
# date
Wed Apr 19 02:30:45 UTC 2017

docker-compose.xml

環境変数としてTZを渡してあげるのが一番スマートです。

    environment:
      TZ: "Asia/Tokyo"

PHP

date.timezoneをしていします。

/usr/local/etc/php/php.ini

[Date]
date.timezone = "Asia/Tokyo"

設定の確認方法は

# php -i | grep timezone
Default timezone => UTC
date.timezone => no value => no value

CakePHP

config/bootstrap.php

この設定がどの範囲に影響するのかはまだ不明。。。

date_default_timezone_set('UTC');
↓
date_default_timezone_set('Asia/Tokyo');

config/app.php

DB接続時のタイムゾーンの設定です。

    'Datasources' => [
        'default' => [
            'timezone' => 'Asia/Tokyo',
        ],
    ],

MySQL

MySQLはOSのタイムゾーンを変更するとその変更に影響を受けるようです。

/etc/mysql/conf.d/my.cnf

[mysqld]
default-time-zone = 'Asia/Tokyo'

[mysqld_safe]
timezone = 'Asia/Tokyo'

設定状況の確認方法は

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)