如何获得客户的时区?

Val*_*lev 27 php timezone zend-framework

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

如何获得客户的时区?

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

(这不是关于格式的问题 - 我对俄罗斯圣彼得堡获得'欧洲/莫斯科'或'UTC-3'是好的,而是让时区客户端使用.但是以秒为单位的delta是首选)

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

Wes*_*y92 12

我用jQuery和PHP编写了一个函数.经过测试,确实有效!

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

<?php    
    session_start();
    $timezone = $_SESSION['time'];
?>
Run Code Online (Sandbox Code Playgroud)

这将读取会话变量"time",我们现在要创建它.

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

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

同样在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>
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到或未注意到,但您需要将URL更改为您的实际域.

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

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不?除非我弄错了,否则时区只能从客户端声明,并且在php会话中使用它会增加很多灵活性. (4认同)
  • 模板引擎在某些时候将模板代码转换为直接的php. (2认同)

Gor*_*don 8

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

您还可以通过Ajax将时区发送到服务器,并让它随时执行您需要的任何操作.或者,如果您没有使用它进行任何服务器端计算,只需在需要的地方应用时区客户端.真的取决于你的用例.

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

  • 那个链接坏了.这可能是一个副本:http://blog.codez.in/php5-time-zone-solution/web-development/2010/07/09 (8认同)
  • 现在两个链接都坏了:-( (2认同)