首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取客户端的时区?

如何获取客户端的时区?
EN

Stack Overflow用户
提问于 2009-12-15 13:44:04
回答 3查看 74.4K关注 0票数 30

我正在使用Zend_Framework编写一个应用程序(所以解决方案可以依赖它)。

如何获取客户端的时区?

例如,如果有人在俄罗斯莫斯科,我想得到3*60*60 (因为有UTC+3)。如果他在英国,我想要零。如果他使用UTC-3:30 (加拿大?),我想要-3.5*60*60。

(这不是格式的问题-我对俄罗斯圣彼得堡的“欧洲/莫斯科”或“UTC-3”没有意见,而是关于让客户使用时区的问题。但最好是以秒为单位的增量)

我想到的唯一解决方案就是让javascript为我获取本地时间,然后重定向。

EN

回答 3

Stack Overflow用户

发布于 2011-04-10 03:42:52

我用jQuery和PHP写了一个函数。这是经过测试的,并且确实有效!

在想要将时区作为变量的PHP页面上,将以下代码片段放在页面顶部附近的某个位置:

代码语言:javascript
复制
<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>

这将读取我们现在将要创建的会话变量"time“。

在同一页的中,您首先需要包含jQuery:

代码语言:javascript
复制
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

另外,在jQuery下面的中,粘贴以下内容:

代码语言:javascript
复制
<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://domain.com/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

您可能注意到了,也可能没有注意到,但是您需要将url更改为您实际的域。

最后一件事。你可能想知道timezone.php到底是什么。嗯,它很简单:(创建一个名为timezone.php的新文件,并使用上面的url指向它)

代码语言:javascript
复制
<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

如果运行正常,它将首先加载页面,执行JavaScript,然后重新加载页面。然后,您将能够读取$timezone变量并随意使用它!它返回当前的UTC/GMT时区偏移(GMT -7)或您所在的任何时区。

票数 12
EN

Stack Overflow用户

发布于 2014-04-03 07:10:22

这是一个开销很小的cookie解决方案:

代码语言:javascript
复制
  echo <<<EOE
   <script type="text/javascript">
     if (navigator.cookieEnabled)
       document.cookie = "tzo="+ (- new Date().getTimezoneOffset());
   </script>
EOE;
  if (!isset($_COOKIE['tzo'])) {
    echo <<<EOE
      <script type="text/javascript">
        if (navigator.cookieEnabled) document.reload();
        else alert("Cookies must be enabled!");
      </script>
EOE;
    die();
  }
  $ts = new DateTime('now', new DateTimeZone('GMT'));
  $ts->add(DateInterval::createFromDateString($_COOKIE['tzo'].' minutes'));
票数 2
EN

Stack Overflow用户

发布于 2009-12-15 13:51:43

我认为您最好的选择是根据客户端发送过来的Accept-Language头进行猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1905397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档