gpt4 book ai didi

php - 从纬度和经度获取 PHP 时区名称?

转载 作者:IT王子 更新时间:2023-10-29 00:03:04 25 4
gpt4 key购买 nike

有没有办法通过纬度和经度获取用户的时区?不仅仅是偏移量,还有它们所在的实际时区。

本质上,我正在寻找与 DateTimeZone::getLocation 完全相反的方法,它返回某个时区的纬度和经度。

最佳答案

对于那些想从国家代码、纬度和经度获取时区的人。 (如果您的服务器上安装了 geoip 模块,则很容易获得)

试试这个,我添加了距离计算 - 仅适用于具有多个时区的国家。啊,国家代码是两个字母的 ISO 代码。

// ben@jp

function get_nearest_timezone($cur_lat, $cur_long, $country_code = '') {
$timezone_ids = ($country_code) ? DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $country_code)
: DateTimeZone::listIdentifiers();

if($timezone_ids && is_array($timezone_ids) && isset($timezone_ids[0])) {

$time_zone = '';
$tz_distance = 0;

//only one identifier?
if (count($timezone_ids) == 1) {
$time_zone = $timezone_ids[0];
} else {

foreach($timezone_ids as $timezone_id) {
$timezone = new DateTimeZone($timezone_id);
$location = $timezone->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 '<br />'.$timezone_id.' '.$distance;

if (!$time_zone || $tz_distance > $distance) {
$time_zone = $timezone_id;
$tz_distance = $distance;
}

}
}
return $time_zone;
}
return 'unknown';
}
//timezone for one NY co-ordinate
echo get_nearest_timezone(40.772222,-74.164581) ;
// more faster and accurate if you can pass the country code
echo get_nearest_timezone(40.772222, -74.164581, 'US') ;

关于php - 从纬度和经度获取 PHP 时区名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com