如何在codeigniter中的config.php文件中动态查找用户时区?
date_default_timezone_set('Asia/Kolkata');
答案 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)或您所在的任何时区。