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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
PHPでサーバ情報、環境情報を取得する際は「
$_SERVER」を利用するが、似たような情報をCakePHPの関数で取得する際は「getUri()」を使用する。取得出来る値は一致するものもあるが、違うものもあり便利な使い方もある。
-
-
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。
-
-
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。
-
-
CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法
CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。