端くれプログラマの備忘録 CakePHP [CakePHP] Timeヘルパーの使い方

[CakePHP] Timeヘルパーの使い方

複数のタイムゾーンにユーザが分散している会員サイトの場合、ログインしているユーザのタイムゾーンに合わせて時刻表示を補正する必要がある。CakePHPでは、そのためにTimeヘルパーが用意されている。以下ざっくり覚え書き。

ユーザのタイムゾーンに合わせて日時を補正するには

基本的なストーリは以下のとおり。

  • アプリのタイムゾーンをUTCにする
    (app/Config/core.php の date_default_timezone_set(‘UTC’)を有効にする)
  • データベースに保存する時刻はUTCで統一する
  • ユーザのタイムゾーンをデータベースに保存する
    (ログインしているユーザのタイムゾーンをわかるようにする)
  • Timeヘルパーを使って時刻を補正して表示する
    (Timeヘルパーのメソッドの多くにタイムゾーンが指定できる)

Timeヘルパーの使い方

ビュー内ではTimeHelperクラス経由でメソッドを呼び出す。

$this->Time->メソッド名(引数);

バージョン2.1からはCakeTimeクラスのグローバルメソッドに含まれるようになったので、任意の場所から呼び出すことが可能。

CakeTime::メソッド名(引数);

サンプル

以下Cookbookから。

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