उन लोगों के लिए जो देश कोड, अक्षांश और देशांतर से टाइमज़ोन प्राप्त करना चाहते हैं। (यदि आपके सर्वर पर एक जियोप मॉड्यूल स्थापित है तो इसे प्राप्त करना आसान है)
इसे आज़माएं, मैंने दूरी गणना जोड़ दी है - केवल उन देशों के लिए जिनमें कई टाइमज़ोन हैं। आह, और देश कोड दो अक्षर आईएसओ कोड है।
// [email protected]
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') ;
स्रोत
2013-03-20 21:43:45
हाँ यह था .. मैंने पहले geonames में देखा था, लेकिन जो मैं कह सकता था उससे वास्तविक टाइमज़ोन NAME नहीं दिया था। लड़का मैं गलत था और लड़का अब मुझे बेवकूफ लगता है। – Navarr