如何在php中找到用户时区?

时间:2016-09-19 07:41:25

标签: php codeigniter

如何在codeigniter中的config.php文件中动态查找用户时区?

date_default_timezone_set('Asia/Kolkata');

3 个答案:

答案 0 :(得分:3)

使用Javascript,您可以获得用户时区:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    document.getElementById("hiddenVal").value = timezone;
 </script>

在javascript中获取时区后,您可以在PHP代码中使用该值。 在HTML中创建一个名称和id为“hiddenval”的隐藏元素,并从表单提交中获取该元素的值,如

<?hpp
 echo$usertime_zone =  $_REQUEST['hiddenval'];
?>

如果您只想使用PHP,请使用以下代码:

<?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...
}

答案 1 :(得分:2)

您必须使用javascript(例如http://momentjs.com/timezone/),或者您必须使用geoip在后端方面确定它(CURL客户端IP到http://freegeoip.net/?q=IP_ADDR)。此外,如果您有多个TLD(例如.com,.se等),您可以使用这些TLD,如果没有其他工作。当然,如果由于某种原因自动方式失败,您应该允许用户从用户界面更改时区。

答案 2 :(得分:0)

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

这将读取会话变量“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://domain.com/timezone.php",
            data: 'time='+ visitortimezone,
            success: function(){
                location.reload();
            }
        });
    }
});
</script>

您可能已经注意到或未注意到,但您需要将网址更改为您的实际域名。

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

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

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