2011-01-19 88 views
0

我必須在這裏丟失一些非常明顯的東西:

我有一個用戶,其區域設置設置爲美國/洛杉磯。當我查看'用戶'數據庫表時,它們的時區字段值爲-28800。這是有道理的;格林尼治標準時間前8小時= -28800秒。

但現在,當用戶將他的語言環境更改爲美國/紐約時,時區值保持不變,而不是在格林尼治標準時間前5小時切換到-18000。爲什麼不發生這種變化?如果我在錯誤的地方尋找,我會在哪裏找到與其語言環境相匹配的時區值?

服務器的時區也設置爲美國/洛杉磯,如果這很重要。謝謝!

回答

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是一個佔位符。對這個鉤子中的傳入$編輯做一個print_r,你應該能夠找到記錄時區變化的地方,然後用該數組路徑替換$ myTimeZone(例如... $ edit ['values'] ['timezone 「])。如果它完全沒有通過,那麼你正在使用的表單改變語言環境出了問題。

如果您使用自己寫的表單,您也可以在該表單的提交功能中處理該表單。

+0

Weirder and weirder。如果有問題,我正在運行Drupal 6.19。我要走你所建議的路線;在_user處理程序中,我在$ edit中看到兩個有用的值:'dst'是在時區下拉列表中指定的任何值(例如,「America/Los_Angeles」),而'timezone'是數據庫表示的任何值(例如,-28800)。當我嘗試你建議的user_save事情時,傳入offset值(例如-14400),我陷入一個PHP錯誤「未捕獲的異常'異常',並帶有消息'DateTimeZone :: __ construct():Unknown or bad timezone() 「」。 – 2011-01-20 05:03:24

+0

如果我通過「America/Los_Angeles」,同樣的事情會發生。如果我嘗試簡單地將新的時區值抨擊到數據庫中,那麼在_user更新處理程序完成時,它就不存在了。 Blurgh。有些東西看起來真的在這裏破碎了,我完全糊塗了(尤其是如此基本的東西可能會如此破碎)。我正在檢查我的代碼,看看我是否在用戶帳戶上做錯了什麼,但到目前爲止,我什麼都看不到。 – 2011-01-20 05:03:40

0

ARGGH - FALSE ALARM。正如我將所有這一切包裝起來一樣,我認爲可能值得檢查我的另一個Drupal站點,以查看$ user-> timezone發生的情況。事實證明它正常工作 - 更改用戶編輯頁面中的區域設置,並根據需要更改$ user-> timezone更改。因此,我在我當前的網站某個地方搞了一個小狗。 Drupal本身似乎沒問題。浪費你時間的道歉;但無論如何非常感謝。

相關問題