我想通过PHP中的IP地址获取时区.实际上,我有一个将在客户机上运行的应用程序.我有客户机的IP地址.但我无法为每台客户机获取时区.
$ip = "189.240.194.147"; //$_SERVER['REMOTE_ADDR'] $ipInfo = file_get_contents('http://ip-api.com/json/' . $ip); $ipInfo = json_decode($ipInfo); $timezone = $ipInfo->timezone; date_default_timezone_set($timezone); echo date_default_timezone_get(); echo date('Y/m/d H:i:s');
有时它不能在本地服务器上工作,所以尝试在服务器上.
甚至不能依靠IP地址映射到一个国家; 如果你还想获得时区,你就会在薄冰上行走.你最好让客户端给你发送时区,也许是在标题中.
请参阅Tor:匿名在线,这是另一个停止使用IP地址的原因.
如果您在本地计算机上运行它,则可以检查配置的时区.
http://www.php.net/manual/en/function.date-default-timezone-get.php
有很多更好,更可靠的方法,然后尝试使用GeoIP猜测时区.如果您感到幸运,请尝试:http://www.php.net/manual/en/book.geoip.php
$region = geoip_region_by_name('www.example.com'); $tz = geoip_time_zone_by_country_and_region($region['country_code'], $region['region']);
获取客户端的时区并不是绝对肯定的,但是如果您让客户端从他们的机器上提交日期和时间,您可以根据它与GMT相关的时间来计算它.所以,如果它是在他们的机器上下午7点而且是格林尼治标准时间上午12:00,那么你可以确定它们是GMT或-5(EST/DST)
通过他或她的IP地址搜索用户的时区不是一个好主意,因为他可以在不同的时间从不同的地方访问他或她的帐户.因此无法通过IP地址找到他的时区.但我试图找到一个解决方案,我在这里给我的代码.任何有关编码技术的批评都将受到高度赞赏.
getLocation(); $tz_lat = $location['latitude']; $tz_long = $location['longitude']; $theta = $cur_long - $tz_long; $distance = (sin(deg2rad($cur_lat)) * sin(deg2rad($tz_lat))) + (cos(deg2rad($cur_lat)) * cos(deg2rad($tz_lat)) * cos(deg2rad($theta))); $distance = acos($distance); $distance = abs(rad2deg($distance)); // echo '
'.$timezone_id.' '.$distance; if (!$time_zone || $tz_distance > $distance) { $time_zone = $timezone_id; $tz_distance = $distance; } } } return $time_zone; } return 'unknown'; }