CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
2018/05/13
CakePHP3でタイムゾーンを指定する手順の解説
CakePHP3の定義ファイルに記載してある「タイムゾーン」の設定は、標準設定では「UTC」になっています。
これを日本時間に設定を変更します。
ちなみに、「UTC」は「協定世界時」と呼ばれる世界の標準時刻で、かつて広く使われていました「グリニッジ標準時(GMT)」から置き換えられたものです。
また、日本の標準時は「JST」と表現します。
CakePHP3でタイムゾーンの設定をする前に MySQLの設定を確認する
「CakePHP3でタイムゾーンを設定する手順」として開設を行いますが、まず最初に、下記の記事に従って、MySQL側でタイムゾーンの設定がされているか、確認をしてください。
MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も
この MySQLのタイムゾーンの設定ができていない場合は、下記のエラーメッセージが表示されるためです。
|
1 |
Error: SQLSTATE[HY000]: General error: 1298 Unknown or incorrect time zone: 'Asia/Tokyo' |
ローカル環境でエラーが出ても問題ない場合は、次項の CakePHP3の設定を先に行っても問題ありませんが、本番環境などでエラーが発生することを避けたい場合は、先に MySQLの設定を行ってください。
CakePHP3の定義ファイルの設定
CakePHP3のタイムゾーンの変更は、設定ファイルである、app.php、bootstrap.phpの 2ファイルの設定情報を変更します。
/config/app.phpの値の変更
/config/app.php の「Datasources」にある「timezone」の値を変更します。
デフォルトでは「UTC」になっていますので、これを「Asia/Tokyo」もしくは「+09:00」にします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'root', 'password' => 'pass', 'database' => 'cake3', 'encoding' => 'utf8', // 'timezone' => 'UTC', 'timezone' => 'Asia/Tokyo', 'flags' => [], 'cacheMetadata' => true, 'log' => false, |
CakePHP3.4 の場合は /config/bootstrap.phpの値を変更
続けて、/config/bootstrap.php の「date_default_timezone_set」の値を変更します。
こちらもデフォルトでは「UTC」になっていますので、これを「Asia/Tokyo」にします。
|
1 2 3 4 5 6 |
/* * Set server timezone to UTC. You can change it to another timezone of your * choice but using UTC makes time calculations / conversions easier. */ // date_default_timezone_set('UTC'); date_default_timezone_set('Asia/Tokyo'); |
CakePHP3.6 の場合は /config/app.phpの値を変更
CakePHP3.6の場合は、/config/app.php の「APP_DEFAULT_TIMEZONE」の値を変更します。
こちらもデフォルトでは「UTC」になっていますので、これを「Asia/Tokyo」にします。
|
1 2 3 4 5 6 |
'App' => [ 'namespace' => 'App', 'encoding' => env('APP_ENCODING', 'UTF-8'), 'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'), // 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'), 'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'), |
変更されたことの確認
わざわざ記載するほどのことでもないですが、設定した内容が正しく変更されたことを確認するために、適当なテンプレートファイル「index.ctp」などに下記の日時を表示する処理を追記して、確認を行ってください。
|
1 2 3 |
<div> <?php echo date("Y/m/d H:i:s"); ?> </div> |
php.iniのタイムゾーンの設定
CakePHP3の設定を行うことで、この「php.ini」の設定を行っていなくても日本時間の表示はできますが、CakePHPを使わない PHPのプログラムで日本時間になっていないということが発生する場合もありますので、予防措置として、php.iniの設定箇所についてもご紹介しておきます。
php.iniの場所は、標準設定の場合はそれぞれ下記になります。
Linuxの場合 /etc/php.ini
XAMPPの場合 c:\xampp\php\php.ini
下記の通り、「date.timezone」を検索し、「Asia/Tokyo」を設定します。
|
1 2 3 4 5 |
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = date.timezone = Asia/Tokyo |
私の環境の XAMPPの php.iniでは「date.timezone」の記述が 2ヵ所にありました。
複数個所ないか、確認しておく方がいいでしょう。
また、php.iniの設定変更を反映させるために、Apacheを再起動することを忘れずに実行しましょう。
CakePHP3の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
-
CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5で指定したカラムに特定の値に該当のレコードの有無をチェックするにはexists()を使う。単純にカラムを指定する方法から複数条件をand、orで探すこともできる。
-
-
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。
-
-
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。
-
-
CakePHP3で環境変数を設定して本番環境と開発環境を分けて処理をする場合
CakePHP3で開発環境と本番環境とで違う設定ファイルを読み込ませて環境ごとに定数を切り替える方法を解説。Apacheのhttpd.confに環境変数を設定し、それを読み込み判別する。
-
-
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。
-
-
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。
-
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。