cakephp2.2 Model createdのtimezoneがUTCになる

Timezone+9

 

なぜか cakephp上では変な時間(UTC)になってしまう時の対策。

core.phpのtimezoneの設定を確認。

[cc lang=’php’ line_numbers=’false’]
/**
* Uncomment this line and correct your server timezone to fix
* any date & time related errors.
*/
//date_default_timezone_set(‘UTC’);
[/cc]

timezoneの設定はコメントアウトされてる。

コメントにちゃんと書いて有りますな。

ここのコメント外してあんたのサーバーに合わせた設定にしなさいよと。

言われたとおりに

[cc lang=’php’ line_numbers=’false’]
date_default_timezone_set(‘Asia/Tokyo’);
[/cc]

Asia/Tokyo に変えて解決。

…と普通ならここで解決するはずが、うちでは全く解決しない。

普段は大丈夫やのにController内で自作Componentを使おうとするとなぜかtimezoneがUTCになってしまう。

とにかく原因究明のために色んなとこでtimezoneがどうなってるのかを調査してみることに。

[cc lang=’php’ line_numbers=’false’]
class FooController extends AppController {

public $components = array(
‘Foo’,
);
/**
* beforeFilter
*
* @var mixed
*/
public function beforeFilter() {
var_dump(date(‘e’));
}
/**
* index method
*
* @return void
*/
public function index() {
var_dump(date(‘e’));
}
}
[/cc]

どの段階で変わってるのか見るために beforeFilter と index で timezoneをdumpしてみる。

結果 beforeFilter は Asia/Tokyo

index は UTC になってた。

んで public $components を削除してみると今度はちゃんと両方 Asia/Tokyo に。

 

これで Component が悪さしてるのは間違いない。

 

でも timezone の変更なんかしてへんぞーと更に調査を進めると…見つかりました。

PHP で Twitter API や OAuth 認証を行うためのライブラリ 「tmhOAuth」のコンストラクタ内で

[cc lang=’php’ line_numbers=’false’]
// default configuration options
$this->config = array_merge(
array(
//略
// default timezone for requests
‘timezone’ => ‘UTC’,
            //略
),
$config
);
date_default_timezone_set($this->config[‘timezone’]);
[/cc]

こんなのが!

思いっきりUTCにセットしちゃってるYO!

configはnewする時に上書き出来るので

[cc lang=’php’ line_numbers=’false’]
$tmhOAuth = new tmhOAuth(
‘consumer_key’ => ‘******************’,
‘consumer_secret’ => ‘*********************’,
‘timezone’ => ‘Asia/Tokyo’,
);
[/cc]

こんな感じにセットしてやって解決。

cakephpのソースまで追っかけてた努力は何だったんだ(ノД`)

コメントを残す

メールアドレスが公開されることはありません。