2011-01-19 12 views
0

ここには本当に明白なものがあります。

ロケールがアメリカ/ロサンゼルスに設定されています。 「ユーザー」データベーステーブルを見ると、タイムゾーンフィールドの値は-28800です。意味あり; GMT = -28800秒の8時間前。

しかし、ユーザーがロケールをAmerica/New Yorkに変更すると、GMTの5時間前に-18000に切り替えるのではなく、タイムゾーンの値が同じままになります。なぜこの変更は起こっていないのですか?間違った場所を探している場合、そのロケールに一致するタイムゾーン値はどこにありますか?

サーバのタイムゾーンもAmerica/Los Angelesに設定されています(問題がある場合)。ありがとう!

答えて

0

バグのような感じです。どのバージョンのDrupal?いずれにしても、hook_userを使ってかなり簡単に修正できるはずです。 user_saveを実行し、新しいタイムゾーン値を明示的に定義する必要があります。

function trnAccount_user($op, &$edit, &$account, $category = NULL) { 

switch($op) { 
case 'update': 
    user_save($account, array('timezone' => $myTimeZone); 
break; 
} 

$ myTimeZoneはプレースホルダです。このフック内の入力$ editに対してprint_rを実行すると、タイムゾーンの変更がどこに記録されているのかを知ることができるはずです。$ myTimeZoneをその配列パスに置き換えてください(たとえば... $ edit ['values'] ['timezone '])。あなたのロケールの変更を使用しているフォームで何かが間違っている場合は、

自分で書いたフォームを使用している場合は、そのフォームの送信機能でこれを処理することもできます。

+0

奇妙で怪しい。私はDrupal 6.19を実行しています。あなたが提案したルートに行きます。 _userハンドラの中で、私は$ editの2つの有用な値を見ています: 'dst'はタイムゾーンドロップダウンで指定されたもの(例えば "America/Los_Angeles")です。 、-28800)。あなたが提案したuser_saveを試してみましたが、オフセット値(例えば-14400)を渡して、 "Uncaught exception '例外'というPHPのエラーになります。 'DateTimeZone :: __ construct():Unknown or bad timezone() '' –

+0

"America/Los_Angeles"を渡すと同じことが起こります。また、新しいタイムゾーン値を単にデータベースに入れようとすると、_user更新ハンドラが完了するまでにはそこには存在しません。ぼろぼろ。何かが本当にここで壊れているように見えますが、私は完全に混乱しています(特にこのような基本的なことがどのように壊れるかについて)。私は私のコードをチェックして、私がユーザーアカウントに何か間違っているかどうかを確認していますが、これまでは何も見ていません。 –

+0

とにかく - 私は、$ user-> dstの値からユーザーのタイムゾーンオフセットを取得するあまりにも高価ではない関数を組み込み、オフセットが必要なときにそれを呼び出します。私は$ user-> timezoneの価値を持ったハードコアモンキーがDrupalの腸の中に何かを壊してしまうのではないかと心配しています(とにかく、これらの変更をスティックすることはできません...)。しかし、私はまだこれがどうして起こっているのか混乱しています。私はこの同じことをDrupalボード上に投稿しましたが、効果はありません。多分私はそれを少し押し上げようとします。しかし、ありがとう! –

0

ARGGH - FALSE ALARM。私がこれをすべて上書きしていたのと同じように、Drupalの別のサイトをチェックして$ user-> timezoneがどうなるか見てみる価値があると思いました。それが正しく動作していることがわかります。ユーザー編集ページでロケールを変更し、$ user-> timezoneを変更する必要があります。したがって、私は現在のサイトのどこかで犬を弄っています。 Drupal自体はOKと思われます。あなたの時間を無駄にすることに対する謝罪。いずれにしても大変感謝しています。

+0

倍長整数。全面的な開示、または古い馬鹿の自己批判のため、自分のサイトでJavascriptを使用して現在のタイムゾーンを確認し、それに応じてユーザーのアカウントを設定するオートタイムゾーンモジュールを実行していました。モジュールがインストールされているのを忘れてしまった。それはしばらくしています.... –

関連する問題