【问题标题】:Shouldn't changing a user's Drupal locale also change $user->timezone?更改用户的 Drupal 语言环境不应该同时更改 $user->timezone 吗?
【发布时间】:2011-01-21 01:43:54
【问题描述】:

我必须在这里遗漏一些非常明显的东西:

我有一个用户的区域设置为美国/洛杉矶。当我查看“用户”数据库表时,时区字段的值为 -28800。这是有道理的; GMT 前 8 小时 = -28800 秒。

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

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

【问题讨论】:

    标签: drupal timezone


    【解决方案1】:

    听起来像一个错误。什么版本的 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 '])。如果它根本没有通过,那么您使用的表单有问题,请更改语言环境。

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

    【讨论】:

    • 越来越奇怪了。如果这很重要,我正在运行 Drupal 6.19。我走你建议的路线;在 _user 处理程序中,我在 $edit 中看到两个有用的值:“dst”是时区下拉列表中指定的任何值(例如,“America/Los_Angeles”),而“时区”是数据库所说的任何值(例如, -28800)。当我尝试使用您建议的 user_save 时,传入偏移值(例如,-14400),我陷入了 PHP 错误“未捕获的异常 'Exception' 并带有消息 'DateTimeZone::__construct(): Unknown or bad timezone () '"。
    • 如果我传入“America/Los_Angeles”,也会发生同样的事情。如果我尝试简单地将新时区值放入数据库中,那么在 _user 更新处理程序完成时它就不存在了。布鲁格。这里的东西似乎真的坏了,我完全糊涂了(尤其是这么基本的东西怎么会像这样坏掉)。我正在检查我的代码,看看我是否对用户帐户做错了什么,但到目前为止我什么也没看到。
    • 现在继续前进,无论如何——我已经组合了一个不太昂贵的函数,它将从他的 $user->dst 值中获取用户的时区偏移量,当我调用它时需要偏移量。我担心用 $user->timezone 的值来胡闹的铁杆会搞砸 Drupal 内部的某些东西(而且我无法让这些更改坚持下去,无论如何......)。但是我仍然对为什么会这样感到困惑;我已经在 Drupal 板上发布了同样的内容,但没有任何效果;也许我会试着把它推高一点。不过谢谢!
    【解决方案2】:

    ARGGH——错误警报。就在我结束这一切的时候,我认为可能值得检查一下我的另一个 Drupal 站点,看看那里的 $user->timezone 会发生什么。事实证明它工作正常——在用户编辑页面中更改语言环境,并且 $user->timezone 会按应有的方式更改。因此,我在当前站点的某个地方搞砸了狗; Drupal 本身似乎还可以。为浪费您的时间而道歉;但无论如何都非常感谢。

    【讨论】:

    • 双 arggh。为了全面披露或老式的毛主义自我批评,我的问题是我的网站正在运行自动时区模块,该模块使用 Javascript 检查用户浏览器的当前时区,然后相应地设置用户的帐户。我只是忘记了模块已安装;好久不见了……
    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多