उपयोगकर्ता के समयक्षेत्र का निर्धारण करें


610

क्या वेब सर्वर के लिए एक मानक तरीका है जो किसी वेब पेज के भीतर उपयोगकर्ता के टाइमज़ोन को निर्धारित करने में सक्षम हो सकता है?

शायद एक HTTP शीर्ष लेख या के भाग से user-agent स्ट्रिंग के ?


6
उपयोगकर्ता से पूछें। यदि आपको उपयोगकर्ता के कंप्यूटर से समय क्षेत्र मिलता है, और यह गलत है, तो क्या?
रोब विलियम्स

40
तब उपयोगकर्ता शायद परवाह नहीं करता है?
एग्नॉस्टर

2
क्या आपका मतलब है stackoverflow.com/q/1091372/218196 ?
फेलिक्स क्लिंग

2
दुर्भाग्य से, इस प्रश्न के उत्तर भी उपयोगकर्ता प्रोफाइलिंग और जियोफेंसिंग के लिए अनुमति देते हैं।
विलियम एंट्रीकेन

1
आपको उपयोगकर्ता समयक्षेत्र जानने की आवश्यकता क्यों है?
ब्रेअम ऑक्ट

जवाबों:


326
-new Date().getTimezoneOffset()/60;

विधि getTimezoneOffset()GMT से आपका समय घटाएगी और मिनटों की संख्या लौटाएगी। इसलिए यदि आप GMT-8 में रहते हैं, तो यह 480 पर वापस आ जाएगी।

इसे घंटे में रखने के लिए, 60 से विभाजित करें। यह भी ध्यान दें कि संकेत आपके द्वारा की गई आवश्यकता के विपरीत है - यह आपके समय क्षेत्र से GMT की ऑफ़सेट की गणना कर रहा है, न कि आपके समय क्षेत्र की ऑफसेट GMT से। इसे ठीक करने के लिए, बस 1 से गुणा करें।

यह भी ध्यान दें कि w3school कहता है:

डेलाइट सेविंग टाइम का उपयोग करने के अभ्यास के कारण, लौटाया गया मान स्थिर नहीं है।


5
उन उपयोगकर्ताओं के बारे में क्या है जो बिना जावास्क्रिप्ट समर्थन के ब्राउज़र वाले सेल फोन का उपयोग करते हैं? मुझे सवाल पसंद है, उपयोगकर्ता HTTP हेडर, उपयोगकर्ता एजेंट के बारे में पूछता है ... क्या इस कार्य को सर्वर साइड बनाने का कोई तरीका है, जितना संभव हो उतना सटीक?
निश्चल

18
यह हमेशा डीएसटी के लिए काम नहीं करता है। टाइमज़ोन ऑफ़सेट प्राप्त करें जैसा कि यह कहता है। इसकी भरपाई हो जाती है। एक समय ज़ोन वास्तव में एक भौगोलिक क्षेत्र है। यह दिन के उजाले की बचत के लिए काम नहीं करेगा क्योंकि आप यह नहीं जानते कि उपयोगकर्ता कौन से गोलार्ध में रहते हैं, या यदि उनके देश में भी दिन की बचत होती है। इसके बजाय इसका उपयोग क्यों न करें:>>> date.toTimeString() "15:46:04 GMT+1200 (New Zealand Standard Time)"
कीओ

20
मैं कीओ के साथ अलग होने की भीख माँगता हूँ। GetTimezoneOffset () की परिभाषा (ECMA मानक के अनुसार ecma-international.org/ecma-262/5.1/#sec-15.9.5.26 ) "मिनटों में स्थानीय समय और UTC समय के बीच का अंतर लौटाता है।" - दूसरे शब्दों में, इसे दिन की बचत को ध्यान में रखना चाहिए। मोज़िला के दस्तावेज़ कहते हैं, "डेलाइट बचत समय इस मूल्य को किसी दिए गए स्थान के लिए भी स्थिर होने से रोकता है।"
xgretsch

11
@xgretsch: यह GMT से उपयोगकर्ता की वर्तमान ऑफ़सेट प्राप्त करता है। यदि आप एक ही समय पर एक ही समय प्रस्तुत कर रहे हैं, तो यह ठीक है (जब तक कि वर्तमान तिथि परिवर्तन की तारीख नहीं है, जहां यह गलत हो सकता है)। हालांकि, कई टाइमज़ोन हैं जिनमें जीएमटी से समान ऑफसेट हैं, और उनके पास अलग-अलग बदलाव तिथियां हो सकती हैं या दिन के उजाले की बचत का उपयोग नहीं कर सकते हैं।
माइक डिमिक

12
एक बात यहाँ ध्यान दें; कुछ स्थानों (जैसे कनाडा में न्यूफ़ाउंडलैंड) में टाइमज़ोन हैं जो आधे घंटे से बंद हैं, इसलिए 60 से विभाजित करने के बाद आपका उत्तर पूर्णांक नहीं हो सकता है।
जेसन वाल्टन

193

सबसे लोकप्रिय (== मानक?) जो समय क्षेत्र मैंने देखा है उसके निर्धारण का तरीका केवल उपयोगकर्ताओं से स्वयं पूछ रहा है यदि आपकी वेबसाइट को सदस्यता की आवश्यकता है, तो इसे उपयोगकर्ताओं के प्रोफ़ाइल डेटा में सहेजा जा सकता है। एनॉन उपयोगकर्ताओं के लिए, तिथियां यूटीसी या जीएमटी या कुछ इस तरह प्रदर्शित की जा सकती हैं।

मैं स्मार्ट अलेक बनने की कोशिश नहीं कर रहा हूं। यह सिर्फ इतना है कि कभी-कभी कुछ समस्याओं के किसी भी प्रोग्रामिंग संदर्भ के बाहर बेहतर समाधान होते हैं।


5
जब कोई उपयोगकर्ता एक .ics फ़ाइल डाउनलोड कर रहा होता है, तो उसके स्थान के लिए विशिष्ट समय शुरू होना चाहिए (जैसे देश भर में 9-11am)? उन्हें यह कहने के लिए नहीं होना चाहिए कि उनका समय क्षेत्र क्या है।
मर्सी सटन २

33
@ इस्माइल: लेकिन यूजर्स अंतरराष्ट्रीय स्तर पर यात्रा करते हैं और उन्हें हर बार अपने समय-क्षेत्र को बताने की जरूरत नहीं होती है, जब वे कुछ गैर-देशी टाइमजोन से लॉग इन करते हैं
रजत गुप्ता

10
यह सवाल का जवाब नहीं देता है, जो स्पष्ट रूप से तात्पर्य है कि वह एक तकनीकी समाधान की तलाश कर रहा है।
G-Wiz

5
@gWiz ओपी एक मानक समाधान के लिए पूछ रहा है। यह सुंदर मानक है।
साइमन बर्गोट

4
सबसे अच्छा समाधान संभवत: उपयोगकर्ता से पूछने का एक संयोजन होगा (उदाहरण के लिए किसी रिपोर्ट के शीर्ष पर टाइम-ज़ोन ड्रॉप प्रदान करना), जबकि उपयोगकर्ता द्वारा मोबाइल पर होने पर जीपीएस-निर्धारित समय-क्षेत्र में ड्रॉप डाउन चयन को डिफ़ॉल्ट करना। डिवाइस जो स्थान की जानकारी प्रदान करता है, और अन्यथा UTC के लिए डिफ़ॉल्ट है।
20

131

कोई HTTP हेडर नहीं है जो ग्राहकों को अब तक के टाइमज़ोन की रिपोर्ट करेगा, हालांकि इसे HTTP विनिर्देश में शामिल करने का सुझाव दिया गया है।

अगर यह मैं था, तो शायद मैं क्लाइंटसाइड जावास्क्रिप्ट का उपयोग करके टाइमज़ोन लाने की कोशिश करूंगा और फिर इसे अजाक्स या कुछ और का उपयोग करके सर्वर में जमा करूंगा।


16
अजीब तरह से, यह सवाल का एकमात्र सही उत्तर है, जो पूछता है कि यह सर्वर साइड कैसे करना है। मुझे इस बात पर संदेह है कि अधिक मतों के साथ अन्य उत्तर हैं क्योंकि एक बार जब आप महसूस करते हैं कि आपको इसे ग्राहक पक्ष में करने की आवश्यकता है तो आप अन्य उत्तरों का उपयोग करते हुए समाप्त होते हैं। लेकिन IMHO किसी अन्य जवाब को upvoting एक भी इस upvoting होना चाहिए।
टीटीटी

मेरा मानना ​​है कि संभव समय क्षेत्रों को सॉर्ट करने के लिए सबसे अच्छा तरीका भू-आईपी स्थान का उपयोग करना है और डिफ़ॉल्ट रूप से उपयोगकर्ता एजेंट समय ऑफसेट (जावास्क्रिप्ट आवश्यक) के लिए पहला (जो) मैच है। उसके बाद भी, आपको टाइमज़ोन को ठीक करने का एक तरीका प्रदान करना होगा, भले ही यह विधि गलत का चयन करेगी।
मिक्को रेंटालीनें

जब वे हमेशा हेडर में खुद को विज्ञापित नहीं करते हैं तो @MikkoRantalainen सावधानीपूर्वक प्रॉक्सिस का उपयोग करते हैं।
मैथ्यू

@ मैथ्यू आजकल एक बेहतर जवाब मौजूद है: stackoverflow.com/a/11836123/334451
मिको रान्टालैनेन

2
यह वस्तुतः एकमात्र उत्तर है जिसने वास्तव में प्रश्न को संबोधित किया है।
lscoughlin

54

क्लाइंट के स्थानीय समय को प्राप्त करने के लिए जावास्क्रिप्ट सबसे आसान तरीका है। मैं स्थानीय समय वापस भेजने के लिए एक XMLHttpRequest का उपयोग करने का सुझाव दूंगा , और यदि वह विफल रहता है, तो उनके आईपी पते के आधार पर वापस पाए गए समयक्षेत्र में गिर जाते हैं।

जहां तक ​​जियोलोकेशन की बात है, मैंने कई प्रोजेक्ट्स पर MaxMind GeoIP का उपयोग किया है और यह अच्छी तरह से काम करता है, हालांकि मुझे यकीन नहीं है कि वे टाइमज़ोन डेटा प्रदान करते हैं। यह एक ऐसी सेवा है जिसके लिए आप भुगतान करते हैं और वे आपके डेटाबेस को मासिक अपडेट प्रदान करते हैं। वे कई वेब भाषाओं में रैपर प्रदान करते हैं।


मैंने इस जवाब को वोट दिया है क्योंकि जियोआईपी जैसे डेटाबेस से प्राप्त अक्षांश और देशांतर (जिसमें अब तक एक मुफ्त संस्करण उपलब्ध है) को डेटाबेस के साथ जोड़ा जा सकता है जो इस तरह के समन्वय को टाइम ज़ोन में बदल देता है। मुझे लगता है कि जियोनीम्स के पास एक ऐसा डेटाबेस है।
पीटर ओ।

मैक्समाइंड जियोआईपी डेटाबेस / एपीआई के वर्तमान संस्करण (दोनों मुफ्त और भुगतान के लिए), वास्तव में टाइमज़ोन जानकारी की आपूर्ति करते हैं (यह मेरे टाइमज़ोन के लिए "यूरोप / लंदन" लौटाता है।) मुझे याद नहीं है कि क्या उनके जियोआईपी सिस्टम का पुराना संस्करण है। वही किया, लेकिन यह अब बहुत अच्छी तरह से काम करता है! MaxMind फ़ील्ड्स को "time_zone", "time_zone_name" नाम दिया गया है।
मैथ्यू Slyman

51

सबसे पहले, यह समझें कि जावास्क्रिप्ट में समय क्षेत्र का पता लगाना अपूर्ण है। आप किसी विशेष दिनांक और समय के लिए स्थानीय समय क्षेत्रgetTimezoneOffset को Dateऑब्जेक्ट के इंस्टेंस पर उपयोग करके प्राप्त कर सकते हैं , लेकिन यह एक पूर्ण IANA समय क्षेत्र के समान नहीं है America/Los_Angeles

कुछ विकल्प हैं जो हालांकि काम कर सकते हैं:

const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tzid);

परिणाम एक स्ट्रिंग है जिसमें कंप्यूटर का IANA समय क्षेत्र सेटिंग है जहां कोड चल रहा है।

Intl संगतता तालिका में समर्थित वातावरण सूचीबद्ध हैं । DateTimeFormatअनुभाग का विस्तार करें , और नामित सुविधा को देखें resolvedOptions().timeZone defaults to the host environment

  • कुछ पुस्तकालय, जैसे लक्सन इस एपीआई का उपयोग कार्यों जैसे समय क्षेत्र को निर्धारित करने के लिए करते हैं luxon.Settings.defaultZoneName

    • यदि आपको पर्यावरण के व्यापक सेट, जैसे पुराने वेब ब्राउज़र का समर्थन करने की आवश्यकता है, तो आप समय क्षेत्र में एक शिक्षित अनुमान लगाने के लिए एक पुस्तकालय का उपयोग कर सकते हैं । वे उपलब्ध होने पर पहले Intlएपीआई की कोशिश करके काम करते हैं , और जब यह उपलब्ध नहीं होता है, तो वे आंतरिक getTimezoneOffsetफ़ंक्शन Dateसेट से उपयुक्त समय क्षेत्र चुनने के लिए परिणामों का उपयोग करते हुए, समय में कई अलग-अलग बिंदुओं के लिए ऑब्जेक्ट के कार्य से पूछताछ करते हैं ।

    JsTimezoneDetect और क्षण-समय दोनों में यह कार्यक्षमता है।

    // using jsTimeZoneDetect
    var tzid = jstz.determine().name();
    
    // using moment-timezone
    var tzid = moment.tz.guess();

    दोनों ही मामलों में, परिणाम केवल एक अनुमान के रूप में सोचा जा सकता है। अनुमान कई मामलों में सही हो सकता है, लेकिन उन सभी में नहीं।

    इसके अतिरिक्त, इन पुस्तकालयों को समय-समय पर इस तथ्य से मुकाबला करने के लिए अद्यतन किया जाता है कि कई पुराने जावास्क्रिप्ट कार्यान्वयन केवल अपने स्थानीय समय क्षेत्र के लिए वर्तमान डेलाइट बचत समय नियम से अवगत हैं । उस पर अधिक जानकारी यहाँ।

अंत में, एक बेहतर तरीका यह है कि वास्तव में अपने उपयोगकर्ता से उनके समय क्षेत्र के लिए पूछें। एक सेटिंग प्रदान करें जो वे बदल सकते हैं। आप डिफ़ॉल्ट सेटिंग चुनने के लिए उपरोक्त विकल्पों में से एक का उपयोग कर सकते हैं , लेकिन अपने ऐप में उस से विचलन करना असंभव नहीं है।

उपयोगकर्ता के कंप्यूटर पर समय क्षेत्र सेटिंग पर निर्भर नहीं होने का पूरी तरह से अलग तरीका भी है । इसके बजाय, यदि आप अक्षांश और देशांतर निर्देशांक एकत्र कर सकते हैं, तो आप इनमें से किसी एक विधि का उपयोग करके समय क्षेत्र को हल कर सकते हैं । यह मोबाइल उपकरणों पर अच्छा काम करता है।


उपयोगकर्ता की भौगोलिक स्थिति (अर्थात उनके स्थान) का उपयोग करके समयक्षेत्र को कम करना भी त्रुटिपूर्ण है। उपयोगकर्ता अपने डिवाइस पर एक विशिष्ट टाइमज़ोन का उपयोग करने की इच्छा कर सकते हैं जो स्थानीय टाइमज़ोन नहीं है, यहां तक ​​कि यह उसी समय (या नहीं) प्रदर्शित कर सकता है। उदाहरण के लिए, यात्री अक्सर अपने उपकरणों को अपने सामान्य इलाके में सेट किए गए टाइमज़ोन के साथ छोड़ देते हैं और बिना किसी सलाह के अलग-अलग तारीखों का उपयोग करने की तारीख और समय देखने की उम्मीद नहीं करते हैं। मैं यहाँ व्यक्तिगत अनुभव से बात कर सकता हूँ ... ;-)
रॉबग

बता नहीं सकता अगर तुम मुझे रोब ट्रोल कर रहे हैं। ;) लेकिन इनमें से कोई भी दृष्टिकोण अपने स्थान का उपयोग नहीं करता है, बल्कि डिवाइस पर सेटिंग करता है, इसलिए आपकी बात के साथ संरेखित करता है। (केवल अंतिम पैराग्राफ में उल्लिखित वैकल्पिक तरीका वर्तमान स्थान का उपयोग करेगा।)
मैट जॉनसन-पिंट

एक शब्दावली नोट के साथ चिंतन करना: "लोकेल" उपयोगकर्ता की भौगोलिक स्थिति के लिए सशक्त नहीं है। "लोकेल" भाषा, संख्या प्रारूप, कैलेंडर आदि जैसी सेटिंग्स का एक समूह है। उदाहरण के लिए, de_DE लोकेल जर्मन को डिफ़ॉल्ट भाषा, यूरो को डिफ़ॉल्ट मुद्रा, दशमलव विभाजक के रूप में अल्पविराम, हजारों विभाजक के रूप में अवधि और ग्रेगोरियन के रूप में निर्दिष्ट करता है। कैलेंडर के रूप में। डेवलपर
..millailla.org

49

ब्राउज़र जिस टाइम ज़ोन में है उसे निर्धारित करने के लिए यहाँ एक मजबूत जावास्क्रिप्ट सॉल्यूशन है।

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"

https://bitbucket.org/pellepim/jstimezonedetect

परिशिष्ट 1: अब यह परियोजना GitHub पर स्थित है: https://github.com/pellepim/jstimezonetect


14
लिंक केवल उत्तर हतोत्साहित करता है, क्योंकि यदि लिंक गायब हो जाता है, तो उत्तर उपयोगी हो जाता है; और क्योंकि लिंक का पालन किए बिना, पाठकों को पता नहीं है कि क्या यह एक अच्छा जवाब देता है। इस मामले में, आप स्पष्ट कर सकते हैं कि यह एक 3-पार्टी लाइब्रेरी है जो पहचान के लिए डेटाबेस-आधारित दृष्टिकोण लेता है, और शायद इसके संचालन के कुछ सिद्धांतों की व्याख्या करता है।
IMSoP

1
इस! जाने का यह रास्ता है। सरल पुस्तकालय, डीएसटी को ठीक से संभालता है। अन्य उत्तर डब्ल्यूटीएफ से भरे हुए हैं और कई डीएसटी नहीं करते हैं।
दाराबियो

1
यह लाइब्रेरी बहुत चालाक है। यह UTC के लिए वर्तमान ऑफ़सेट को क्वेरी करके काम करता है, फिर UTC में परिवर्तन होने तक सेकंड को जोड़कर या प्रतिस्थापित करके JavaScript दिनांक ऑब्जेक्ट समय को समायोजित करता है। इस पद्धति का उपयोग करते हुए इस पुस्तकालय ने समय क्षेत्र की विशिष्ट पहचान करने के लिए कई पर्याप्त डीएसटी परिवर्तनों का पता लगाया। मुझे लगता है कि अगर पुस्तकालय बाइनरी खोज के बजाय बाइनरी खोज करता तो पुस्तकालय और भी बेहतर प्रदर्शन कर सकता था। वापसी का मूल्य एक आईएएनए ज़ोन सूचना कुंजी (उर्फ ओल्सन टाइम ज़ोन डेटाबेस) है।
मिको रानाल्टेन

3
इस लाइब्रेरी की अब जरूरत नहीं है। आधुनिक ब्राउज़र Intl API का समर्थन करते हैं, जो IANA टाइमज़ोन स्ट्रिंग लौटाता है। इस जवाब को देखें ।
डैन डस्केल्सस्कु

42

यहाँ एक और अधिक पूर्ण तरीका है।

  1. उपयोगकर्ता के लिए टाइमज़ोन ऑफ़सेट प्राप्त करें
  2. दिन के उजाले की सीमाओं पर कुछ दिनों का परीक्षण करें ताकि यह निर्धारित किया जा सके कि वे एक ऐसे क्षेत्र में हैं जो दिन की बचत का उपयोग करता है।

एक अंश नीचे है:

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    // Go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        // To ignore daylight saving time look for the lowest offset.
        // Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

जेएस (रास्ता बैक मशीन के माध्यम से) से टीएस और डीएसटी प्राप्त करना


यह मेरे लिए काम किया! कोड के लिए कुछ अद्यतन के लिए ब्लॉग पोस्ट के तहत टिप्पणियों को पढ़ें।
अर्लोमेडिया

यह अभी भी समय क्षेत्र के लिए मानक ऑफसेट लौटाएगा , जैसे कि +02: 00। यह आपको उपयोगकर्ता के समय क्षेत्र का निर्धारण करने के लिए पर्याप्त जानकारी नहीं देगा , जैसे कि Africa/Johannesburgया Europe/Istanbulटाइमजोन टैग विकि देखें ।
मैट जॉनसन-पिंट

32

Unkwntech के दृष्टिकोण का उपयोग करते हुए, मैंने jQuery और PHP का उपयोग करते हुए एक फ़ंक्शन लिखा। यह परीक्षण किया है और काम करता है!

PHP पृष्ठ पर जहाँ आप चर के रूप में टाइमज़ोन रखना चाहते हैं, पृष्ठ के शीर्ष के पास कहीं पर कोड का यह टुकड़ा है:

<?php
    session_start();
    $timezone = $_SESSION['time'];
?>

यह सत्र चर "समय" को पढ़ेगा, जिसे हम अब बनाने वाले हैं।

उसी पृष्ठ पर, <head> में, आपको सबसे पहले jQuery शामिल करना होगा:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

JQuery के नीचे <head> में भी इसे पेस्ट करें:

<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://example.org/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

आपने देखा या नहीं देखा होगा, लेकिन आपको URL को अपने वास्तविक डोमेन में बदलने की आवश्यकता है।

एक अंतिम बात। आप शायद सोच रहे हैं कि बिल्ली timezone.php क्या है। ठीक है, यह केवल इस प्रकार है: (एक नई फ़ाइल बनाने के लिए जिसे timezone.php कहा जाता है और उपरोक्त URL के साथ इंगित करें)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

यदि यह सही ढंग से काम करता है, तो यह पहले पृष्ठ को लोड करेगा, जावास्क्रिप्ट को निष्पादित करेगा और पृष्ठ को फिर से लोड करेगा। तब आप $ timezone चर को पढ़ने और अपनी खुशी के लिए इसका उपयोग करने में सक्षम होंगे! यह वर्तमान UTC / GMT टाइम ज़ोन ऑफ़सेट (GMT -7) या आप जो भी समयक्षेत्र में हैं, उसे लौटाता है।


मुझे यह पसंद है, लेकिन मेरे पास कुछ ऐसा हो सकता है जो मौजूदा $ _SESSION ['समय'] की जांच करता है और केवल जावास्क्रिप्ट को फिर से लोड करने के लिए मिलता है अगर इसके अलग
क्रिस्टोफर चेस

1
संभवतः इसे ट्रांसपोर्ट करने के लिए सत्र की तुलना में कुकी का उपयोग करना आसान है, क्योंकि PHP सत्र को लॉक करने और अनजाने में करने से आपके ऐप में मंदी हो सकती है। अधिकतम दक्षता के लिए, आप सत्र में मूल्य की प्रतिलिपि बना सकते हैं और कुकी को हटा सकते हैं ताकि बाद के अनुरोधों में इसे न भेजा जाए।
IMSoP

25

AJAX के अनुरोध पर jQuery के साथ HTTP हेडर के रूप में टाइमज़ोन ऑफसेट सबमिट करने के लिए

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
    }
});

आप http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/moment.tz.guess(); से भी वास्तविक समय क्षेत्र नाम प्राप्त करने के लिए ऐसा ही कुछ कर सकते हैं


1
यह केवल वर्तमान समय क्षेत्र को ऑफसेट करता है - समय क्षेत्र नहींटाइमजोन टैग विकि देखें ।
मैट जॉनसन-पिंट

समय क्षेत्र नाम के लिए समान करने के बारे में जानकारी शामिल करने के लिए संपादित।
फिल्पेरो

24

मुझे अभी भी यहां एक विस्तृत उत्तर नहीं मिला है जो समय क्षेत्र को प्राप्त करता है। आपको IP पते से जियोकोड की आवश्यकता नहीं होनी चाहिए या किसी ऑफसेट से PHP (lol) या गलत अनुमान का उपयोग नहीं करना चाहिए।

सबसे पहले एक समय क्षेत्र GMT से सिर्फ एक ऑफसेट नहीं है। यह भूमि का एक क्षेत्र है जिसमें स्थानीय मानकों द्वारा समय नियम निर्धारित किए जाते हैं। कुछ देशों में दिन के उजाले की बचत होती है, और अलग-अलग समय पर डीएसटी पर स्विच किया जाएगा। आमतौर पर वास्तविक क्षेत्र प्राप्त करना महत्वपूर्ण है, न कि केवल वर्तमान ऑफसेट।

यदि आप इस समयक्षेत्र को संग्रहीत करने का इरादा रखते हैं, उदाहरण के लिए उपयोगकर्ता प्राथमिकताओं में आप ज़ोन चाहते हैं न कि केवल ऑफ़सेट। रीयलटाइम रूपांतरणों के लिए यह ज्यादा मायने नहीं रखेगा।

अब, जावास्क्रिप्ट के साथ समय क्षेत्र प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं:

>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.

हालाँकि मुझे यह मजबूत प्लगइन का उपयोग करना आसान लगा, जो ऑलसेन स्वरूपित टाइमज़ोन को लौटाता है:

https://github.com/scottwater/jquery.detect_timezone


22

PHP dateफ़ंक्शन के साथ आपको सर्वर का दिनांक समय मिलेगा, जिस पर साइट स्थित है। उपयोगकर्ता के समय को प्राप्त करने का एकमात्र तरीका जावास्क्रिप्ट का उपयोग करना है।

लेकिन मैं आपको सुझाव देता हूं, यदि आपकी साइट के लिए पंजीकरण आवश्यक है, तो सबसे अच्छा तरीका यह है कि उपयोगकर्ता को अनिवार्य फ़ील्ड के रूप में पंजीकरण करने के लिए कहें। आप रजिस्टर पृष्ठ में विभिन्न समय क्षेत्रों को सूचीबद्ध कर सकते हैं और डेटाबेस में सहेज सकते हैं। इसके बाद, यदि उपयोगकर्ता साइट में लॉग इन करता है तो आप उस सत्र के लिए डिफ़ॉल्ट समय क्षेत्र को उपयोगकर्ताओं के चयनित समय क्षेत्र के अनुसार निर्धारित कर सकते हैं।

आप PHP फ़ंक्शन का उपयोग करके किसी भी विशिष्ट समय क्षेत्र को सेट कर सकते हैं date_default_timezone_set। यह उपयोगकर्ताओं के लिए निर्दिष्ट समय क्षेत्र निर्धारित करता है।

मूल रूप से उपयोगकर्ताओं का समय क्षेत्र क्लाइंट की ओर जाता है, इसलिए हमें इसके लिए जावास्क्रिप्ट का उपयोग करना चाहिए।

नीचे PHP और जावास्क्रिप्ट का उपयोग करके उपयोगकर्ताओं का समय क्षेत्र प्राप्त करने के लिए स्क्रिप्ट है।

<?php
    #http://www.php.net/manual/en/timezones.php List of Time Zones
    function showclienttime()
    {
        if(!isset($_COOKIE['GMT_bias']))
        {
?>

            <script type="text/javascript">
                var Cookies = {};
                Cookies.create = function (name, value, days) {
                    if (days) {
                        var date = new Date();
                        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                        var expires = "; expires=" + date.toGMTString();
                    }
                    else {
                        var expires = "";
                    }
                    document.cookie = name + "=" + value + expires + "; path=/";
                    this[name] = value;
                }

                var now = new Date();
                Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
                window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
            </script>

            <?php

        }
        else {
          $fct_clientbias = $_COOKIE['GMT_bias'];
        }

        $fct_servertimedata = gettimeofday();
        $fct_servertime = $fct_servertimedata['sec'];
        $fct_serverbias = $fct_servertimedata['minuteswest'];
        $fct_totalbias = $fct_serverbias  $fct_clientbias;
        $fct_totalbias = $fct_totalbias * 60;
        $fct_clienttimestamp = $fct_servertime + $fct_totalbias;
        $fct_time = time();
        $fct_year = strftime("%Y", $fct_clienttimestamp);
        $fct_month = strftime("%B", $fct_clienttimestamp);
        $fct_day = strftime("%d", $fct_clienttimestamp);
        $fct_hour = strftime("%I", $fct_clienttimestamp);
        $fct_minute = strftime("%M", $fct_clienttimestamp);
        $fct_second = strftime("%S", $fct_clienttimestamp);
        $fct_am_pm = strftime("%p", $fct_clienttimestamp);
        echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
    }

    showclienttime();
?>

लेकिन मेरे दृष्टिकोण के अनुसार, उपयोगकर्ताओं से पूछना बेहतर है कि क्या आपके प्रोजेक्ट में पंजीकरण अनिवार्य है।


22

निश्चित रूप से स्थान (और इसलिए टाइमज़ोन) निर्धारित करने के लिए आईपी पते का उपयोग न करें - ऐसा इसलिए है क्योंकि एनएटी, प्रॉक्सी (तेजी से लोकप्रिय), और वीपीएन के साथ, आईपी पते आवश्यक रूप से उपयोगकर्ता के वास्तविक स्थान को प्रतिबिंबित नहीं करते हैं, लेकिन जिस स्थान पर है। उन प्रोटोकॉल को लागू करने वाले सर्वर रहते हैं।

एक नंबर उपयोगकर्ता की संख्या पोर्टेबिलिटी की लोकप्रियता को देखते हुए अमेरिकी क्षेत्र कोड अब उपयोगी नहीं हैं।

IP पता और ऊपर दिखाई गई अन्य तकनीकें डिफ़ॉल्ट को सुझाने के लिए उपयोगी हैं जिन्हें उपयोगकर्ता समायोजित / सही कर सकता है।


21

जावास्क्रिप्ट:

function maketimus(timestampz)
{
    var linktime = new Date(timestampz * 1000);
    var linkday = linktime.getDate();
    var freakingmonths = new Array();

    freakingmonths[0]  = "jan";
    freakingmonths[1]  = "feb";
    freakingmonths[2]  = "mar";
    freakingmonths[3]  = "apr";
    freakingmonths[4]  = "may";
    freakingmonths[5]  = "jun";
    freakingmonths[6]  = "jul";
    freakingmonths[7]  = "aug";
    freakingmonths[8]  = "sep";
    freakingmonths[9]  = "oct";
    freakingmonths[10] = "nov";
    freakingmonths[11] = "dec";

    var linkmonthnum = linktime.getMonth();
    var linkmonth = freakingmonths[linkmonthnum];
    var linkyear = linktime.getFullYear();
    var linkhour = linktime.getHours();
    var linkminute = linktime.getMinutes();

    if (linkminute < 10)
    {
        linkminute = "0" + linkminute;
    }

    var fomratedtime = linkday + linkmonth + linkyear + " " +
                       linkhour + ":" + linkminute + "h";
    return fomratedtime;
}

बस इस समारोह में यूनिक्स टाइमस्टैम्प प्रारूप में अपना समय प्रदान करें; जावास्क्रिप्ट पहले से ही उपयोगकर्ता का समय क्षेत्र जानता है।

ऐशे ही:

पीएचपी:

echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';

यह हमेशा उस समय को सही ढंग से दिखाएगा जो व्यक्ति ने अपने कंप्यूटर घड़ी पर निर्धारित समय-क्षेत्र के आधार पर किया है। किसी को कुछ भी पूछने और स्थानों में सहेजने की आवश्यकता नहीं है, भगवान का शुक्र है!


$ unix_timestamp_ofshiz? यहां कुछ याद आ रहा है और काफी काम नहीं करता है, भले ही ऐसा लगता है कि यह एक अच्छा जवाब हो सकता है।

20

आसान, जैसे जावास्क्रिप्ट getTimezoneOffsetफ़ंक्शन का उपयोग करें:

-new Date().getTimezoneOffset()/60;

1
यह एक जावास्क्रिप्ट फ़ंक्शन है, न कि PHP फ़ंक्शन।
सिनकोडेनाडा

इसके अलावा, यह केवल वर्तमान समय क्षेत्र ऑफसेट देता है - समय क्षेत्र नहींटाइमजोन टैग विकि देखें ।
मैट जॉनसन-पिंट

3
यह स्वीकृत उत्तर की एक प्रति है, आप इस पर मतदान भी क्यों करते हैं।
रामबेटिनो

19

जादू सब में लगता है

visitortime.getTimezoneOffset()

यह अच्छा है, मुझे इसके बारे में पता नहीं था। क्या यह इंटरनेट एक्सप्लोरर, आदि में काम करता है? वहां से आपको जावास्क्रिप्ट को अजाक्स में उपयोग करने में सक्षम होना चाहिए, कुकीज़ सेट करें, जो भी हो। मैं शायद खुद कुकी मार्ग जाऊँगा।

यद्यपि आपको उपयोगकर्ता को इसे बदलने की अनुमति देने की आवश्यकता होगी। हमने कुछ समय पहले ऐसा करने के लिए जियोलोकेशन (मैक्समाइंड के माध्यम से) का उपयोग करने की कोशिश की थी, और यह अक्सर यथोचित रूप से गलत था - इसे करने लायक बनाने के लिए पर्याप्त है, इसलिए हम केवल उपयोगकर्ता को उनकी प्रोफ़ाइल में सेट करते हैं, और उन उपयोगकर्ताओं को एक नोटिस दिखाते हैं जो अभी तक उनका सेट नहीं किया है।


15

यहां एक लेख है (स्रोत कोड के साथ) जो बताता है कि कैसे एक ASP.NET (VB.NET, C)) में स्थानीयकृत समय का निर्धारण और उपयोग करना है:

यह समय के बारे में है

संक्षेप में, वर्णित दृष्टिकोण जावास्क्रिप्ट getTimezoneOffsetफ़ंक्शन पर निर्भर करता है , जो कि सत्र कुकी में सहेजे गए मान और GMT और स्थानीय समय के बीच समय मूल्यों को समायोजित करने के लिए कोड-बैक द्वारा उपयोग किया जाता है। अच्छी बात यह है कि उपयोगकर्ता को समय क्षेत्र (कोड स्वचालित रूप से करता है) निर्दिष्ट करने की आवश्यकता नहीं है। अधिक शामिल है (यही कारण है कि मैं लेख से लिंक करता हूं), लेकिन प्रदान किया गया कोड वास्तव में उपयोग करना आसान बनाता है। मुझे संदेह है कि आप तर्क को PHP और अन्य भाषाओं में परिवर्तित कर सकते हैं (जब तक आप ASP.NET समझते हैं)।


1
लिंक मर चुका है। मुझे लगता है कि यह वैकल्पिक लिंक है: devproconnections.com/article/aspnet2/it-s-about-time-122778
गण

1
यह लेख पीडीएफ फॉर्म के रूप में यहां भी उपलब्ध है: app.box.com/sared/bfvvmidtyg
Ivaylo

इस आलेख में वर्णित UTC सर्वर समय को स्थानीय क्लाइंट समय में परिवर्तित करने की विधि गलत है। UTC समय को सर्वर पर समायोजित करने के लिए वर्तमान क्लाइंट ऑफ़सेट का उपयोग करने से क्लाइंट लोकेशन के लिए आधे साल के लिए "स्थानीय" समय गलत हो जाएगा, जो डेलाइट बचत समय का निरीक्षण करता है। इस परिदृश्य पर विचार करें: 14 जनवरी 2013 (GMT + 0000 मानक समय) पर यूके में एक क्लाइंट 21 अगस्त 2015 14:00 (GMT + 0100 डेलाइट टाइम) की तारीख और समय निर्धारित करता है। यह 21 अगस्त 2015 13:00 UTC के सर्वर पर सामान्यीकृत हो जाता है। जिस दिन ऐसा होता है, क्लाइंट ऑफसेट 0 होता है, इसलिए क्लाइंट को वापस भेजा गया समय 21 अगस्त 2015 13:00 होगा।
स्टीफन ब्लेयर

मान्य बिंदु, लेकिन मैंने यह दावा नहीं किया कि यह बुलेट-प्रूफ समाधान है। यदि आपको वास्तव में समय-संवेदनशील समाधान को लागू करने की आवश्यकता है, तो ट्रेन टिकट बुकिंग एप्लिकेशन को कहें, तो आपको अधिक व्यापक (और जटिल समाधान) खोजने की आवश्यकता है। हालाँकि, कई ऐप्स के लिए यह कोई समस्या नहीं होगी। क्योंकि कई मामलों में हम मौजूदा सत्र के लिए जीएमटी मूल्यों को स्थानीय बनाना चाहते हैं। अब, यदि आपके पास एक ऐसा एप्लिकेशन है जो भविष्य में भी कुछ के लिए समय की मोहर को बचाने की आवश्यकता है और यह डीटीएस को बर्दाश्त नहीं कर सकता है, तो जीएमटी में सीधे समय बचाने के लिए एक विकल्प पेश करना होगा। यदि आप एक बेहतर विकल्प जानते हैं, तो कृपया साझा करें।
एलिस डेविस

14

यदि आप प्रमाणीकरण के लिए OpenID का उपयोग करते हैं, तो साधारण पंजीकरण एक्सटेंशन प्रमाणित उपयोगकर्ताओं के लिए समस्या का समाधान करेगा (आपको tz से संख्यात्मक में कनवर्ट करना होगा)।

एक अन्य विकल्प उपयोगकर्ता एजेंट की देश की प्राथमिकता से समय क्षेत्र का अनुमान लगाना होगा। यह कुछ हद तक कच्चा तरीका है (एन-यूएस के लिए काम नहीं करेगा), लेकिन एक अच्छा अनुमान है।


13

यह जावास्क्रिप्ट और PHP के साथ सरल है:

भले ही उपयोगकर्ता अपनी आंतरिक घड़ी और / या टाइमज़ोन के साथ गड़बड़ कर सकता है, फिर भी, मैंने ऑफसेट प्राप्त करने के लिए सबसे अच्छा तरीका पाया new Date().getTimezoneOffset();। यह गैर-आक्रामक है, सिर दर्द नहीं देता है और तीसरे पक्ष पर भरोसा करने की आवश्यकता को समाप्त करता है।

कहो कि मेरे पास एक मेज है, usersजिसमें एक क्षेत्र है date_created int(13), जिसमें यूनिक्स टाइमस्टैम्प संग्रहीत हैं;

क्लाइंट मानकर creates a new account, डेटा प्राप्त किया जाता है post, और मुझे क्लाइंट के यूनिक्स टाइमस्टैम्प insert/updateके date_created columnसाथ की जरूरत है , न कि सर्वर की।

चूँकि टाइमज़ोनऑफ़सेट डालने / अपडेट के समय की आवश्यकता होती है, इसे ग्राहक के रूप में जमा करने पर अतिरिक्त $ _POST तत्व के रूप में पारित किया जाता है, इस प्रकार इसे सत्रों और / या कुकीज़ में संग्रहीत करने की आवश्यकता समाप्त हो जाती है, और कोई अतिरिक्त सर्वर भी नहीं होता है।

var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;

कहते हैं कि सर्वर के tzoरूप में प्राप्त करता है $_POST['tzo'];

$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);

सम्मिलित करें / अद्यतन date_created=$user_timestamp

Date_created प्राप्त करते समय, आप टाइमस्टैम्प को इस तरह परिवर्तित कर सकते हैं:

$date_created = // Get from the database
$created = date("F j, Y, g:i a",$date_created); // Return it to the user or whatever

अब, यह उदाहरण किसी की ज़रूरतों के अनुसार फिट हो सकता है, जब यह एक डालने की बात आती है first टाइमस्टैम्प ... जब यह एक अतिरिक्त टाइमस्टैम्प, या टेबल की बात आती है, तो आप भविष्य के संदर्भ के लिए उपयोगकर्ता तालिका में tzo मान डालने, या इसे सेट करने पर विचार करना चाह सकते हैं। सत्र के रूप में या कुकी के रूप में।

अगर उपयोगकर्ता यात्रा करता है और टाइमज़ोन स्विच करता है तो PS BUT क्या है। GMT + 4 में लॉग करता है, GMT-1 पर तेजी से यात्रा करता है और फिर से लॉग इन करता है। अंतिम लॉगिन भविष्य में होगा।

मुझे लगता है ... हम बहुत ज्यादा सोचते हैं।


13

आप इसे ग्राहक के साथ क्षण-समय पर कर सकते हैं और सर्वर पर मूल्य भेज सकते हैं; नमूना उपयोग:

> moment.tz.guess()
"America/Asuncion"

5
फ़ंक्शन का नाम इसकी सटीकता के बारे में सब कुछ बताता है ;-)
महापुरूष

आजकल, moment.js मैं अब अनुशंसित नहीं है वर्तमान में छोटे विकल्प हैं ( दिन , तारीख- fns )। पल बड़ा भारी है
डैन डस्केलस्क्यू

11

PHP में मान्य TZ डेटाबेस टाइमज़ोन नाम प्राप्त करना दो चरणों वाली प्रक्रिया है:

  1. जावास्क्रिप्ट के साथ, समय के माध्यम से मिनटों में ऑफसेट करें getTimezoneOffset। यह ऑफसेट सकारात्मक होगा यदि स्थानीय टाइमज़ोन यूटीसी के पीछे है और नकारात्मक है अगर यह आगे है। इसलिए आपको ऑफसेट में एक विपरीत चिन्ह जोड़ना होगा।

    var timezone_offset_minutes = new Date().getTimezoneOffset();
    timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;

    इस ऑफसेट को PHP में पास करें।

  2. PHP में इस ऑफसेट को टाइमज़ोन_ name_from_abbr फ़ंक्शन के साथ एक मान्य टाइमज़ोन नाम में परिवर्तित करें ।

    // Just an example.
    $timezone_offset_minutes = -360;  // $_GET['timezone_offset_minutes']
    
    // Convert minutes to seconds
    $timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
    
    // America/Chicago
    echo $timezone_name;</code></pre>

मैंने इस पर एक ब्लॉग पोस्ट लिखा है: कैसे PHP में उपयोगकर्ता टाइमज़ोन का पता लगाने के लिए । इसमें एक डेमो भी है।


1
मुझे लगता है कि Intl.DateTimeFormat().resolvedOptions().timeZoneवेब सर्वर पर कॉल करने और भेजने के लिए एक सरल प्रक्रिया है । Ref: stackoverflow.com/questions/9772955/…
माइकल त्सांग

9

इसका उपयोग करने का एक सरल तरीका है:

new Date().getTimezoneOffset();

8
आपने 2 साल पहले से एक समान जवाब (जॉन इसाक द्वारा) क्यों दिया था: stackoverflow.com/a/1809974/836407 ?
chown

2
इसके अलावा, यह केवल वर्तमान समय क्षेत्र ऑफसेट देता है - समय क्षेत्र नहींटाइमजोन टैग विकि देखें ।
मैट जॉनसन-पिंट

8

एक संभावित विकल्प Dateहेडर फ़ील्ड का उपयोग करना है , जिसे आरएफसी 7231 में परिभाषित किया गया है और यह टाइमज़ोन को शामिल करने वाला है। बेशक, यह गारंटी नहीं है कि मूल्य वास्तव में ग्राहक का समयक्षेत्र है, लेकिन यह एक सुविधाजनक शुरुआती बिंदु हो सकता है।


1
दुर्भाग्य से, यह हेडर मुख्य रूप से प्रतिक्रियाओं के लिए डिज़ाइन किया गया है, अनुरोधों के लिए नहीं: "एक उपयोगकर्ता एजेंट एक अनुरोध में एक दिनांक हेडर फ़ील्ड भेजता है, हालांकि आमतौर पर ऐसा तब तक नहीं करेगा जब तक कि यह सर्वर को उपयोगी जानकारी देने के लिए नहीं माना जाता है।" मैंने अभी जाँच की है, और फ़ायरफ़ॉक्स इसे नहीं भेजता है।
IMSoP

8

यहाँ है कि मैं यह कैसे करते हैं। यह उपयोगकर्ता के स्थानीय समयक्षेत्र में PHP डिफ़ॉल्ट टाइमज़ोन सेट करेगा। बस अपने सभी पृष्ठों के शीर्ष पर निम्नलिखित चिपकाएँ:

<?php
session_start();

if(!isset($_SESSION['timezone']))
{
    if(!isset($_REQUEST['offset']))
    {
    ?>
        <script>
        var d = new Date()
        var offset= -d.getTimezoneOffset()/60;
        location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
        </script>
        <?php   
    }
    else
    {
        $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
        $index = array_keys($zonelist, $_REQUEST['offset']);
        $_SESSION['timezone'] = $index[0];
    }
}

date_default_timezone_set($_SESSION['timezone']);

//rest of your code goes here
?>

1
यह "डेलाइट सेविंग" समायोजन के लिए जिम्मेदार नहीं है - डबलिन में एक उपयोगकर्ता सर्दियों में आपके 'यूरोप / डबलिन' से मेल खाता है, लेकिन गर्मियों में 'यूरोप / बेलग्रेड'। यदि आप वर्तमान ऑफ़सेट का उपयोग करने जा रहे हैं, तो आप सभी यह मान सकते हैं कि ऑफ़सेट, भौगोलिक पहचानकर्ता नहीं है।
IMSoP

8

इस PHP कोड की कोशिश करें:

<?php
    $ip = $_SERVER['REMOTE_ADDR'];
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=" . $ip . "&full=true");
    $json = json_decode($json,true);
    $timezone = $json['LocalTimeZone'];
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.