如何在第一次请求时获得用户时区(最佳实践)

时间:2012-01-03 07:19:51

标签: php ajax zend-framework localization timezone

我正在尝试使用Zend Framework在第一次请求时获取用户的时区。 目前,一旦我获得时区,我将其存储到$_SESSION变量中。

这是我的动作控制器:

public function init()
{
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
    $ajaxContext->addActionContext('timezone', 'html')->initContext();    
} 

public function timezoneAction()
{
    $_SESSION['tz'] = $this->_getParam('tzName');  
}

我知道在第一次请求期间实际上无法通过Ajax访问此会话变量,因为JavaScript是客户端脚本,并且检测发生在第一个请求之后。也无法通过HTTP标头获取用户的时区。

然后,如何在第一次请求上获取用户的时区? geo-ip是唯一可用的解决方案吗?什么是最佳做法?感谢。

2 个答案:

答案 0 :(得分:3)

如果我正确地读你,问题在于:

  • 某些(新)用户加载页面。
  • 您希望用户看到反映其时区的内容(可能会将某些UTC时间转换为其时区。
  • 在第一次请求期间,服务器不知道他们的时区是什么。
  • WAT DO?

最直接的解决方案是在客户端做到这一点(除非我缺少一些要求 - 你的问题并不完全清楚你的背景)。让服务器以UTC格式输出内容,用一个特殊的类(即<span class="datetime">2012-01-2 01:02:03 UTC</span>包装在一些HTML元素中,然后让一些javascript用一些更加用户友好的本地化的本地化表示替换这些元素的内容时间。

当然,JS并没有真正给你时区。它只是给你一个偏移(通过getTimezoneOffset()),但这应该足以用于显示目的,除非我忘记了某些东西(这有点可能,因为我有一个模糊的回忆,发现这一点令人沮丧,但我我认为这是因为我需要一个实际的时区而不是偏移,因为夏令时了。

答案 1 :(得分:0)

将AJAX请求中的时间发送到您的服务器,并将其与服务器时间进行比较。计算差异,然后使用它来确定用户的时区。

您还可以使用Geo-Ip来帮助您确定用户登录的位置。