date_default_timezone_set()应用于所有人

时间:2018-08-12 01:00:47

标签: php

我想将时区设置为访客的时区。

我是这样子的:

$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不清除?有什么解决办法吗?

任何帮助将不胜感激。

谢谢!

2 个答案:

答案 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即可获得访问者时区。 timezoneparse_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');

这对我来说很好。

答案来源:https://stackoverflow.com/a/20289096/8524395