我想将时区设置为访客的时区。
我是这样子的:
$ip = $_REQUEST['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
date_default_timezone_set($query['timezone']);
} else {
echo 'Unable to get location';
}
但是,当另一个访客访问该站点时,他将具有前一个访客的时区...
为什么date_default_timezone
不清除?有什么解决办法吗?
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
$_SERVER['REMOTE_ADDR']
用于从GET / POST请求中获取数据。应该是$ip = $_SERVER['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
date_default_timezone_set($query['timezone']);
echo 'timezone set to '.$query['timezone'];
} else {
echo 'Unable to get location';
}
代码
timezone set to Asia/Kolkata
输出
$_REQUEST['REMOTE_ADDR']
说明:
$ip
没有值,表示http://ip-api.com/php/
为空。如果查询没有IP的$_SERVER['COOKIE']
,则默认情况下它将获取请求ip,并显示请求数据而不是ip数据。这就是为什么您为每个访问者获得相同的时区。
奖金
您无需使用任何API即可获得访问者时区。 timezone
有parse_str($_SERVER['HTTP_COOKIE'], $cookie);
if(isset($cookie['timezone'])){
date_default_timezone_set($cookie['timezone']);
}
else{
echo 'Unable to get location'; //or do something!
}
位访客。
摘要
from itertools import combinations
l=[1,2,3,4,5,6]
>>> [(x,y,z) for x,y,z in combinations(l,3) if z%y==0 and y%x==0]
[(1, 2, 4), (1, 2, 6), (1, 3, 6)]
答案 1 :(得分:0)
不幸的是,“ Smartpal”的答案很好,但我仍然有同样的问题。
所以我听说date_default_timezone_set()
已经过时而且很旧-这就是为什么我切换到DateTime()
类的原因。
现在,我可以不用这样做date('G')
:
$ip = $_SERVER['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
$tz = $query['timezone'];
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz));
$dt->setTimestamp($timestamp);
echo $dt->format('G');
这对我来说很好。