複数のタイムゾーンにユーザが分散している会員サイトの場合、ログインしているユーザのタイムゾーンに合わせて時刻表示を補正する必要がある。CakePHPでは、そのためにTimeヘルパーが用意されている。以下ざっくり覚え書き。
ユーザのタイムゾーンに合わせて日時を補正するには
基本的なストーリは以下のとおり。
- アプリのタイムゾーンをUTCにする
(app/Config/core.php の date_default_timezone_set(‘UTC’)を有効にする) - データベースに保存する時刻はUTCで統一する
- ユーザのタイムゾーンをデータベースに保存する
(ログインしているユーザのタイムゾーンをわかるようにする) - Timeヘルパーを使って時刻を補正して表示する
(Timeヘルパーのメソッドの多くにタイムゾーンが指定できる)
Timeヘルパーの使い方
ビュー内ではTimeHelperクラス経由でメソッドを呼び出す。
1 |
$this->Time->メソッド名(引数); |
バージョン2.1からはCakeTimeクラスのグローバルメソッドに含まれるようになったので、任意の場所から呼び出すことが可能。
1 |
CakeTime::メソッド名(引数); |
サンプル
以下Cookbookから。
1 2 3 4 5 6 7 8 9 |
echo $this->Time->format( 'F jS, Y h:i A', $post['Post']['created'], null, $user['User']['time_zone'] ); // Will display August 22nd, 2011 11:53 PM for a user in GMT+0 // August 22nd, 2011 03:53 PM for a user in GMT-8 // and August 23rd, 2011 09:53 AM GMT+10 |
Timeヘルパーには役立ちそうなメソッドがいろいろ用意されている。
参考サイト
TimeHelper — CakePHP Cookbook 2.x documentation
http://book.cakephp.org/2.0/en/core-libraries/helpers/time.html