我正在尝试使用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是唯一可用的解决方案吗?什么是最佳做法?感谢。
答案 0 :(得分:3)
如果我正确地读你,问题在于:
最直接的解决方案是在客户端做到这一点(除非我缺少一些要求 - 你的问题并不完全清楚你的背景)。让服务器以UTC格式输出内容,用一个特殊的类(即<span class="datetime">2012-01-2 01:02:03 UTC</span>
包装在一些HTML元素中,然后让一些javascript用一些更加用户友好的本地化的本地化表示替换这些元素的内容时间。
当然,JS并没有真正给你时区。它只是给你一个偏移(通过getTimezoneOffset()),但这应该足以用于显示目的,除非我忘记了某些东西(这有点可能,因为我有一个模糊的回忆,发现这一点令人沮丧,但我我认为这是因为我需要一个实际的时区而不是偏移,因为夏令时了。
答案 1 :(得分:0)
将AJAX请求中的时间发送到您的服务器,并将其与服务器时间进行比较。计算差异,然后使用它来确定用户的时区。
您还可以使用Geo-Ip来帮助您确定用户登录的位置。