गाइड

विज़िटर की लोकेशन के आधार पर सही कारोबारी समय दिखाएँ

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

विज़िटर का समय क्षेत्र पाना

एक ही IP लुकअप सीधे timezone फ़ील्ड लौटाता है, जिससे आपको बिना अलग कॉल के वह मिल जाता है जिसकी ज़रूरत है।

GET /v1/ip?ip=203.0.113.44
{
  "status": "ok",
  "ip": "203.0.113.44",
  "version": 4,
  "found": true,
  "country": "Japan",
  "country_code": "JP",
  "region": "Tokyo",
  "city": "Tokyo",
  "postcode": "100-0001",
  "lat": 35.6762,
  "lon": 139.6503,
  "timezone": "Asia/Tokyo",
  "asn": 2345,
  "org": "Example Telecom"
}

अपने कारोबारी घंटों से तुलना करना

अपने कारोबार के समय क्षेत्र के हिसाब से सहेजे गए अपने कारोबारी घंटों को अभी पाए गए timezone पहचानकर्ता का उपयोग करके विज़िटर के क्षेत्र में बदलें, फिर विज़िटर के मौजूदा स्थानीय समय से तुलना करके तय करें कि "अभी खुला है" दिखाना है या "बंद है", साथ में वह स्थानीय समय भी जिसके अनुसार आप यह दिखा रहे हैं।

दूसरा उदाहरण: एक से ज़्यादा लोकेशन वाला कारोबार

अलग-अलग शहरों में लोकेशन वाले कारोबार को यह मानने के बजाय कि घंटों का एक ही सेट हर जगह लागू होता है, हर लोकेशन के अपने बताए गए घंटे उसके अपने सहेजे गए क्षेत्र के हिसाब से देखने चाहिए, फिर हर एक की तुलना अलग से विज़िटर के क्षेत्र से करनी चाहिए। यह सबसे ज़्यादा तब मायने रखता है जब विज़िटर एक ही पेज पर दो लोकेशन की तुलना कर रहा हो, क्योंकि अगर वे अलग क्षेत्रों में हैं या डेलाइट सेविंग अलग तरह से मानती हैं, तो ठीक उसी पल एक खुली और दूसरी बंद दिख सकती है।

साफ़ बताना कि आपका मतलब किस समय क्षेत्र से है

चुपचाप बदलकर यह उम्मीद करने के बजाय कि विज़िटर समझ जाएगा, दोनों बातें साफ़ दिखाएँ, कुछ इस तरह: "अभी बंद है। आपके समय (Asia/Tokyo) के अनुसार सुबह 9 बजे खुलेगा।" साफ़ बताने से तब उलझन नहीं होती जब कोई कारोबार ऐसी सीमा के आर-पार काम करता है जो एक तरफ़ डेलाइट सेविंग के साथ बदलती है और दूसरी तरफ़ नहीं।

एक आम गलती जिससे बचना चाहिए

खुले या बंद होने की तुलना एक बार करके उस boolean नतीजे को विज़िटर के बाकी सेशन के लिए कैश न करें। 5:55 PM पर की गई तुलना "खुला है" दिखाएगी, और अगर खुले होने की मूल स्थिति दोबारा गणना करने के बजाय कैश की गई है, तो 6:05 PM तक गलत बनी रहेगी। विज़िटर के समय क्षेत्र पहचानकर्ता को कैश करें, क्योंकि वह एक सेशन के लिए सच में स्थिर है, लेकिन खुले या बंद होने की असली तुलना हर रेंडर पर नए सिरे से करें।

एक एज केस: ऐसे क्षेत्र जो डेलाइट सेविंग नहीं मानते

कुछ क्षेत्र पूरे साल एक तय ऑफ़सेट रखते हैं जबकि पड़ोसी क्षेत्र साल में दो बार बदलता है, जिसका मतलब है कि दो क्षेत्रों के बीच का अंतर पूरे कैलेंडर में स्थिर नहीं रहता। अगर आपका तुलना का लॉजिक timezone पहचानकर्ता से काम करने और बदलाव को अपनी date लाइब्रेरी पर छोड़ने के बजाय घंटों में ऑफ़सेट को हार्ड-कोड करता है, तो वह ठीक डेलाइट सेविंग बदलाव के आसपास के हफ़्तों में गड़बड़ा जाएगा।

क्षेत्र को कैश करना, खुले होने की स्थिति को नहीं

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

किसी खास पिछले या आने वाले पल की जाँच

अगर आपको अभी के बजाय किसी खास पल पर ऑफ़सेट क्या था, या क्या होगा, यह जानना हो, जैसे यह पक्का करना कि कल दिया गया ऑर्डर ग्राहक के क्षेत्र में असल में किस समय का था, तो /v1/timezone ठीक इसी तरह की पिछली या आने वाली जाँच के लिए unix timestamp के रूप में एक वैकल्पिक time पैरामीटर स्वीकार करता है।

अनुरोध की लागत

हर नए विज़िटर सेशन के लिए एक IP लुकअप इस फ़ीचर के लिए काफ़ी है। यह विज़िट की पूरी अवधि के लिए कैश किया गया एक अनुरोध है, जो किसी व्यस्त स्टोरफ़्रंट साइट को भी हर कुंजी के साथ मिलने वाले प्रतिदिन 2,500 मुफ़्त अनुरोधों के भीतर आराम से रखता है।

दुनिया भर के दर्शकों के लिए "अभी खुला है" सही दिखाना एक लुकअप और समय की सीधी तुलना का मामला है, कोई जटिल फ़ीचर नहीं। IPv4 लुकअप दस्तावेज़ में पूरा रिस्पॉन्स ढाँचा दिया गया है।