获取用户时区
可能重复:
我怎样才能确定一个networking用户的时区?
哪种做法最好? PHP或JavaScript.Can有人提供了一些片段? 谢谢。
这将把你的时区作为一个PHPvariables。 我用jQuery和PHP编写了一个函数。 这是testing,并且工作!
在你想把时区作为variables的PHP页面上,在这个页面的顶部附近有这段代码:
<?php session_start(); $timezone = $_SESSION['time']; ?>
这将读取会议variables“时间”,我们现在要创build。
在同一页面的<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://domain.com/timezone.php", data: 'time='+ visitortimezone, success: function(){ location.reload(); } }); } }); </script>
您可能注意到,也可能没有注意到,但是您需要将url更改为您的实际域。
最后一件事。 你可能想知道什么是timezone.php。 那么,这只是:(创build一个名为timezone.php的新文件,并用上面的url指向它)
<?php session_start(); $_SESSION['time'] = $_GET['time']; ?>
如果这个工作正常,它将首先加载页面,执行JavaScript,并重新加载页面。 然后,您将能够阅读$ timezonevariables并使用它来享受您的乐趣! 它返回当前的UTC / GMT时区偏移量(GMT -7)或者你所在的任何时区。
你可以在我的博客上阅读更多
干杯
</Westy92>
在服务器端,它不会像JavaScript一样准确。 同时,有时需要解决这样的任务。 只是为了分享这种情况下的可能的解决scheme,我写这个答案。
如果您需要确定用户的时区,可以通过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中有这种检测function。
我自己一直在努力,发现抵消是不够的。 例如,它不会提供有关夏令时的任何信息。 我写了一些代码映射到zoneinfo数据库键。
通过检查一年左右的几个date,你可以更准确地确定一个时区。
试试这里的脚本: http : //jsfiddle.net/pellepim/CsNcf/
只需更改您的系统时区,然后点击运行即可对其进行testing。 如果您正在运行Chrome,则需要在新选项卡中执行每个testing(并且需要重新启动Safari才能获取时区更改)。
如果你想了解更多关于代码的细节,请访问: https : //bitbucket.org/pellepim/jstimezonedetect/