2011-01-19 85 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本身似乎没问题。浪费你时间的道歉;但无论如何非常感谢。

相关问题