如何获取客户的时区?

2022-08-30 14:57:49

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

如何获取客户的时区?

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

(这不是关于格式的问题 - 我可以为俄罗斯圣彼得堡获取“欧洲/莫斯科”或“UTC-3”,而是关于获得时区客户端使用。但以秒为单位的增量是首选)

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


答案 1

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

在您希望将时区作为变量的 PHP 页面上,将此代码段放在页面顶部附近的某个位置:

<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>

这将读取会话变量“time”,我们现在即将创建该变量。

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

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

同样在 jQuery 下方的 ,粘贴以下内容:

<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>

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

最后一件事。您可能想知道.php是什么。好吧,它只是这样:(创建一个名为时区的新文件.php并使用上面的url指向它)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

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


答案 2

查看本文,了解如何通过 JavaScript 设置 Cookie 来检测时区,该 Cookie 将保存客户端的时区。它相当冗长,但那是因为它非常冗长。我已经在我自己的一个应用程序中实现了沿着这些路线的解决方案,并且运行良好。

您还可以通过Ajax将时区发送到服务器,然后让它执行您需要执行的任何操作。或者,如果您没有使用它执行任何服务器端计算,只需在需要时应用时区客户端即可。实际上取决于您的用例。

除此之外,我建议您让访问者自己设置他的时区,并将其存储在Cookie或会话中。


推荐