我必须遗漏一些非常明显的东西:
我有一个用户的区域设置设置为America / Los Angeles。当我查看“用户”数据库表时,它们的时区字段值为-28800。这是有道理的; GMT = -28800秒前8小时。
但现在,当用户将其语言环境更改为美国/纽约时,时区的值保持不变,而不是在GMT前5小时切换到-18000。为什么不发生这种变化?如果我在错误的地方查找,我会在哪里找到与其区域设置匹配的时区值?
服务器的时区也设置为美国/洛杉矶,如果这很重要的话。谢谢!
答案 0 :(得分: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 “])。如果它根本没有通过,那么您正在使用的表单更改了语言环境。
如果您使用自己编写的表单,也可以在该表单的提交函数中处理。
答案 1 :(得分:0)
ARGGH - FALSE ALARM。就像我把这一切都包起来一样,我认为可能值得检查我的另一个Drupal网站,看看那里有$ user-> timezone会发生什么。事实证明它正常工作 - 更改用户编辑页面中的区域设置和$ user->时区更改应该如此。因此,我在当前网站的某个地方搞砸了小狗; Drupal本身似乎没问题。道歉浪费你的时间;但无论如何,非常感谢。