पर आपके लिए एक सिर स्क्रैचर कनवर्ट करें।यूटीसी ऑफसेट को टाइमज़ोन या दिनांक
मैं IPInfoDB के एपीआई से भू आईपी डेटा हथियाने रहा हूँ और यह एक समय क्षेत्र यूटीसी डीएसटी सहित से ऑफसेट रिटर्न (यदि वर्तमान में परिलक्षित)।
उदाहरण के लिए, मैं ईएसटी (-5) में रहता हूं और वर्तमान में यह डीएसटी है, इसलिए भू-आईपी एपीआई ऑफसेट के रूप में भू-आईपी एपीआई रिटर्न (-04:00
) देता है।
यह अद्भुत है क्योंकि डीएसटी एक उग्र सिरदर्द है। लेकिन मेरे आश्चर्य के लिए, यह एक और सिरदर्द का कारण बन गया।
मैं इस डेटा को PHP में AJAX के माध्यम से आवेदन करने के लिए लोड करता हूं। मैं ऐप पर आईपी पते का लाइव स्थानीय समय लेना चाहता हूं।
मेरे पास यह सब ठीक से सेट है, लेकिन मैं ऑफसेट से मेल खाने के लिए PHP टाइमज़ोन को सेट करने का तरीका जानने के लिए पागल हो रहा हूं, इसलिए मैं AJAX के माध्यम से पास करने के लिए वर्तमान समय date('H');
और मिनट date('i');
को पकड़ सकता हूं।
मुझे यकीन नहीं है कि कोई विशिष्ट कार्य है जो मुझे उस ऑफसेट के आधार पर वर्तमान घंटे और मिनट दे सकता है या ऑफसेट के आधार पर टाइमज़ोन सेट करने का व्यावहारिक तरीका है (जो डीएसटी पहले ही लागू होगा प्रभाव में है)।
मैं Google को खोज रहा हूं और Google को खोज रहा हूं, लेकिन मैं जो कर रहा हूं वह अधिक विशिष्ट है क्योंकि डीएसटी पहले ही लागू हो चुका है।
मुझे PHP.net पर एक फ़ंक्शन मिला जो कि यह चाल करता है (यह मेरे टाइमज़ोन के लिए काम करता है और सही समय देता है) हालांकि पीएसटी जैसे अन्य टाइमज़ोन के लिए, यह ऑफसेट होने के बावजूद 1 घंटे बाद लौटा रहा है सही (-07:00
डीएसटी के साथ)।
फ़ंक्शन से लौटा गया टाइमज़ोन Chile/EasterIsland
है जो मुझे लगता है कि यह कारण है। अगर मैं कर सकता, तो मैं संयुक्त राज्य अमेरिका के लिए यह एकमात्र काम करता हूं, लेकिन मुझे इसे दुनिया भर में करने की आवश्यकता है।
यह अब मेरे पास है। अत्यधिक गन्दा कोड क्षमा करें। मैं समाधान को समझने की कोशिश कर रहे पिछले कुछ घंटों में कई चीजों के साथ खेल रहा हूं।
अधिकांश कार्यक्षमता ऑनलाइन मिलीं।
function offsetToTZ($offset) {
switch((string) $offset) {
case '-04:30' : return 'America/Caracas'; break;
case '-03:30' : return 'Canada/Newfoundland'; break;
case '+03:30' : return 'Asia/Tehran'; break;
case '+04:30' : return 'Asia/Kabul'; break;
case '+05:30' : return 'Asia/Kolkata'; break;
case '+05:45' : return 'Asia/Kathmandu'; break;
case '+09:30' : return 'Australia/Darwin'; break;
}
$offset = (int) str_replace(array('0',0,':00',00,'30',30,'45',45,':','+'),'', (string) $offset);
$offset = $offset*60*60;
$abbrarray = timezone_abbreviations_list();
foreach ($abbrarray as $abbr) {
foreach($abbr as $city) {
if($city['offset'] == $offset) {
return $city['timezone_id'];
}
}
}
return false;
}
मैं कुछ समय क्षेत्रों कि :30
और :45
वहाँ बाहर हैं के लिए स्विच/मामले शामिल थे। स्विच/केस की आवश्यकता के बिना भी शामिल करने का एक तरीका हो सकता है।
नोट: ऑफसेट हमेशा भू आईपी एपीआई से इस तरह के +00:00
या -00:00
रूप में वापस आ रहे हैं।
मैं किसी भी मदद या सही दिशा में एक बिंदु की सराहना करता हूं। मैं PHP के साथ बहुत नौसिखिया नहीं हूं, लेकिन ऑफसेट मेरे लिए एक नई कहानी है। धन्यवाद!
यह वह चीज है जिसे मैं ढूंढ रहा था। ऐसा लगता है कि यह ठीक काम करेगा, लेकिन मुझे कुछ समय लेना होगा और इसका परीक्षण करना होगा। किसी भी तरह से, आप उस निकटतम समाधान वाले व्यक्ति हैं जिन्हें मैं ढूंढ रहा था। मैं आपकी मदद की सराहना करता हूं और आपने बक्षीस अर्जित किया है :) –
सावधान रहें, एक बग है: https://bugs.php.net/bug.php?id=44780 –
@ होन्ज़ा जैवोरिक दिलचस्प, मुझे लगता है कि यह निश्चित है क्योंकि स्थान डेलाइट सेविंग के लिए समायोजित नहीं करते हैं। मुझे लगता है कि मुझे इसके लिए एक समाधान मिला है, हालांकि। –