更改用户的Drupal区域设置不也应该更改$user->timezone吗?

更改用户的Drupal区域设置不也应该更改$user->timezone吗?,drupal,timezone,Drupal,Timezone,我肯定错过了一些非常明显的东西: 我有一个用户的区域设置为America/Los Angeles。当我查看“用户”数据库表时,时区字段的值为-28800。这是有道理的;格林尼治标准时间前8小时=-28800秒 但是现在,当用户将其地区更改为美国/纽约时,时区的值保持不变,而不是在格林尼治标准时间前5小时切换到-18000。为什么没有发生这种更改?如果我找错了地方,我会在哪里找到与他们的区域设置相匹配的时区值 服务器的时区也设置为美国/洛杉矶,如果这很重要的话。谢谢 听起来像个虫子。什么版本的Dr

我肯定错过了一些非常明显的东西:

我有一个用户的区域设置为America/Los Angeles。当我查看“用户”数据库表时,时区字段的值为-28800。这是有道理的;格林尼治标准时间前8小时=-28800秒

但是现在,当用户将其地区更改为美国/纽约时,时区的值保持不变,而不是在格林尼治标准时间前5小时切换到-18000。为什么没有发生这种更改?如果我找错了地方,我会在哪里找到与他们的区域设置相匹配的时区值


服务器的时区也设置为美国/洛杉矶,如果这很重要的话。谢谢

听起来像个虫子。什么版本的Drupal?无论哪种方式,您都应该能够使用hook_用户相当轻松地修复它。您需要执行用户保存并显式定义新的时区值。应该是这样的:

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

switch($op) {
case 'update':
  user_save($account, array('timezone' => $myTimeZone);
break;
}
$myTimeZone是一个占位符。在这个钩子中对传入的$edit进行打印,您应该能够找到记录时区更改的位置,然后用该数组路径替换$myTimeZone,例如$编辑['values']['timezone']。如果它根本没有通过,那么您正在使用的表单有问题,请更改区域设置


如果您正在使用自己编写的表单,也可以在该表单的提交函数中处理此问题。

ARGGH-假警报。就在我结束这一切的时候,我认为可能值得检查我的另一个Drupal站点,看看$user->timezone在那里发生了什么。结果表明,它工作正常-更改用户编辑页面中的区域设置,$user->timezone会根据需要进行更改。因此,我在我目前的网站上的某个地方和小狗玩;Drupal本身似乎还不错。为浪费你的时间道歉;但无论如何还是要谢谢你。

越来越奇怪了。我正在运行Drupal 6.19,如果这很重要的话。我要走你建议的路线;在_userhandler中,我看到$edit中有两个有用的值:“dst”是时区下拉列表中指定的值,例如America/Los_Angeles,“timezone”是数据库中显示的值,例如-28800。当我尝试您建议的用户保存方法时,传入偏移量值,例如-14400,我陷入了一个PHP错误,未捕获异常“exception”,消息为“DateTimeZone::u构造:未知或错误时区”。如果我传入美国/洛杉矶,也会发生同样的情况。如果我尝试简单地将新的时区值猛击到数据库中,那么在用户更新处理程序完成时,它就不存在了。模糊。有些东西似乎真的坏了,我完全搞不懂,尤其是这么基本的东西怎么会这样坏。我正在检查我的代码,看看我的用户帐户是否有问题,但到目前为止我什么也看不到。现在,不管怎样,我已经准备了一个不太昂贵的函数,它可以从用户的$user->dst值中获取用户的时区偏移量,并在需要偏移量时调用它。我担心硬核们在$user->timezone的值上瞎搞会把Drupal的内部搞得一团糟,而且我无论如何也无法坚持这些更改。。。。但我仍然不明白为什么会这样;我在Drupal板上发布了同样的东西,但没有效果;也许我会试着把它往上推一点。但是谢谢!双阿格。为了充分披露信息,或者进行老式的毛泽东主义自我批评,我的问题是我的网站运行自动时区模块,该模块使用Javascript检查用户浏览器的当前时区,然后相应地设置用户帐户。我忘了模块已经安装好了;已经有一段时间了。。。。