获取用户时区[重复]

2020/12/17 07:21 · php ·  · 0评论

可能重复:
如何确定网络用户的时区?

哪个是最好的方法?php或javascript。有人可以向我提供一些摘要吗?谢谢。

这将使您的时区成为PHP变量。我使用jQuery和PHP编写了一个函数。经过测试,可以正常工作!

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

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

这将读取我们现在将要创建的会话变量“时间”。

在同一页面的<head>部分中,首先需要包括jQuery:

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

同样在本<head>节中,粘贴此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://example.com/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

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

最后一件事。您可能想知道timezone.php是什么东西。好吧,这很简单:(创建一个名为timezone.php的新文件,并使用上面的URL指向它)

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

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

您可以在我的博客上阅读有关此内容的更多信息

在服务器端,它的准确性不如JavaScript。同时,有时需要解决该任务。只是为了分享这种情况下的可能解决方案,我写下了这个答案。

如果您需要确定用户的时区,可以通过Geo-IP服务来完成。其中一些提供时区。例如,这个(http://smart-ip.net/geoip-api)可以帮助您:

<?php
$ip     = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json   = file_get_contents( 'http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.)
$ipData = json_decode( $json, true);

if ($ipData['timezone']) {
    $tz = new DateTimeZone( $ipData['timezone']);
    $now = new DateTime( 'now', $tz); // DateTime object corellated to user's timezone
} else {
   // we can't determine a timezone - do something else...
}

正如奥德(Oded)回答的那样。您需要在javascript中具有这种检测功能。

我自己为此苦苦挣扎,意识到偏移量还不够。例如,它不提供有关夏时制的任何信息。我最终写了一些代码来映射到zoneinfo数据库密钥。

通过检查一年左右的几个日期,您可以更准确地确定时区。

在此处尝试脚本:http : //jsfiddle.net/pellepim/CsNcf/

只需更改您的系统时区,然后单击运行即可对其进行测试。如果您运行的是chrome,则需要在一个新标签中进行每个测试(并且必须重新启动safar以获取时区更改)。

如果您想了解更多代码细节,请查看:https : //bitbucket.org/pellepim/jstimezonedetect/

本文地址:http://php.askforanswer.com/huoquyonghushiquzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!