DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. CakePHP3 でタイムゾーン変換

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

加藤 正人

2020/04/02

CakePHP3 でタイムゾーン変換

 

CakePHP3 ではデータベースのタイムゾーン設定の既定値は UTC になっているが、PHP 環境やデータベース設定によってはタイムゾーンの設定を変更できない場合がある。

あるいは、クライアント側がタイムゾーンの異なる環境で使用される場合もある。

このような場合にデータベース側が日時としてタイムゾーン付き形式 ( 例えば '2020-02-02 12:34:56 JST' のような形式) をサポートしてくれるといいのだが、実際には MySQL などはそのような形式はサポートしていない。

このような場合、データベースは UTC で運用しクライアント側のタイムゾーンに日時を変換して表示することになる。

・データベース(UTC) ⇒ クライアント (Asia/Tokyo) 表示例

※ $d['created'] が 2020-02-03 10:23:41 の場合、出力は 2020-02-03 19:23:41 になる

・クライアントからの入力 (Asia/Tokyo) ⇒ データベース (UTC) 変換例

※上記の場合出力は 2020-02-11 21:33:24 になる。

この変換は、UTC で保持される DateTime 型データに対し、ローカルタイムの年月日での絞り込みをする場合に重要である。何故なら UTC の1日の開始・終了時点とローカルタイムの1日の開始・終了時点は時差の分だけずれているため、SQL 文の絞り込み条件には日付そのもの (Y-m-d) ではなく時差を考慮した日付の切り替わり日時 (Y-m-d H:i:s) を指定する必要があるためである。

関連タグ: CakePHP3  タイムゾーン 

関連エントリー

CakePHP3 のリダイレクトがうまく行かない例

PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)

CakePHP3 のユーザー定義ファインダーのオプション

PHP3 でデバグモードを一旦無効化した後再度有効化するとDebugKit が見つからない

CakePHP3 で JSON 応答のための定番処理

バージョンを指定して CakePHP をインストールする

CakePHP サイトの移転時の注意

CakePHP3 のアソシエーションで、紐づけ用フィールドを指定する

CakePHP3 のコマンドライン実行

CakePHP3 の Virtual Field と accessor (Getter)

CSRF token mismatch

2019/07/04
CSRF token mismatch

CakePHP3 で created と modified に日付が自動付与されない場合のメモ

CakePHP3 で

CakePHP3 の JSON 出力でエラー

CakePHP3 のミューテータで書き換えたデータが保存されない件

CakePHP3.6.2 のタイムスタンプ調整 (XSERVER の場合)

CakePHP3 で DebugKit が表示されない

最新版 composer.phar のインストール

PHP 7.x で CakePHP 3.x を使う

Remi's PHP5.6 と intl モジュール

X2 と CakePHP 3.x

2017/05/23
X2 と CakePHP 3.x

CakePHP3 の便利機能

CakePHP3 と SQLite

2017/02/20
CakePHP3 と SQLite

CakePHP3 でテーブル不使用フォームのバリデーション

CakePHP3 のファインダーメソッド

CakePHP 3.x の accessor と mutator 【その2】

CakePHP 3.x の accessor と mutator

XSERVER X10 に CakePHP 3.x をインストールする

XSERVER で CakePHP 3.x が Fatal error

CakePHP 3.x インストールメモ

Composer メモ

2015/06/13
Composer メモ