2010-09-01 19 views
12

के बीच टाइमज़ोन अंतर प्राप्त करें यदि मेरा उपयोगकर्ता कैलिफोर्निया में है और उनके कंप्यूटर को पीएसटी पर सेट किया गया है, तो यह 1:00 बजे है। यदि मेरा सर्वर ईएसटी पर सेट है, तो वर्तमान सर्वर का समय 4:00 बजे है।क्लाइंट और सर्वर

मुझे क्लाइंट और सर्वर के बीच टाइमज़ोन अंतर प्राप्त करने के लिए एक तरीका चाहिए, या तो जावास्क्रिप्ट या सी # में। मेरे उदाहरण में, मुझे 3 (या -3, कोई फर्क नहीं पड़ता) मिलेगा।

क्या कोई यह जानता है कि यह कैसे करें?

संपादित करें: RedFilter

के लिये संभावित समाधान जावास्क्रिप्ट में यह सब कर रहा:

serverDate = new Date('<%= DateTime.Now.ToString() %>'); 
clientDate = new Date(); 
diffMin = (serverDate.getTime()-clientDate.getTime())*1000*60; //get difference in minutes 

सोचो कि काम करेगा? या वे दोनों एक ही समय लौट आएंगे?

+2

यदि सर्वर ईएसटी पर सेट है, तो कुछ गलत है। इसे यूटीसी में चलाना चाहिए। इससे समय क्षेत्र से संबंधित कई सिरदर्द निकल जाएंगे। –

+1

@Frederik मैं नहीं देखता कि वास्तव में चीजों को कैसे बदलता है। यदि एप्लिकेशन को क्लाइंट के समय ऑफसेट को जानने की आवश्यकता है, तो सर्वर टाइमज़ोन सेटिंग के बावजूद इसे जानना आवश्यक है। – Pointy

+0

मेरा सर्वर वास्तव में यूटीसी में चल रहा है, मैंने बस "यूटीसी में तारीखों को परिवर्तित करने के लिए फ़ंक्शंस हैं" उत्तरों से बचने के लिए एक उदाहरण के रूप में ईएसटी का उपयोग किया, जो मेरी समस्या से मदद नहीं करेगा। – Steven

उत्तर

13

आप किए जा सकेंगे:

1 - एक जावास्क्रिप्ट तारीख चर के रूप में ग्राहक के लिए सर्वर तारीख लौटें।
2 - एक नई जावास्क्रिप्ट दिनांक क्लाइंट साइड (var currentTime = new Date();) बनाएं और उपरोक्त दिनांक
3 घटाएं - परिणाम को सर्वर पर वापस पोस्ट करें (यदि आवश्यक हो, तो आपको केवल क्लाइंट-साइड अंतर जानने की आवश्यकता हो सकती है)।

अद्यतन

यहाँ एक उदाहरण है:

serverDate = new Date('<%= DateTime.Now.ToString() %>'); 
clientDate = new Date(); 
diffMin = (serverDate.getTime()-clientDate.getTime())/(1000*60); 
alert("serverDate: " + serverDate + "\r\n" + "clientDate: " + clientDate + "\r\n" + 
    "diffMin: " + diffMin); 

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

// यह मेरे लिए उपयोगी था - DateTime.Now.ToString ("yyyy-MM-DDThh: mm: ss")

+0

मैंने अपना मूल संपादित किया, अगर आपको लगता है कि यह काम करेगा तो मुझे बताएं। – Steven

+0

@Steven: मेरा अपडेट देखें – RedFilter

+0

धन्यवाद, यह काम खत्म हो गया। – Steven

0

समय क्षेत्र अंतर के लिए जाँच करने के लिए एक अच्छा तरीका, समय क्षेत्र पता करने के लिए है (स्थान) जहां समय लिया जाता है। यदि आप क्लाइंट साइड और सर्वर पक्ष पर इसे प्राप्त कर सकते हैं तो आप टाइमज़ोनइन्फो क्लास (3.5 मुझे लगता है) की आवश्यकता है TimeZoneInfo from Koders

क्लाइंट और सर्वर समय को संबंधित क्षेत्र के साथ यूटीसी (कन्वर्टटाइमज़ोन टीओयूटीसी) में कनवर्ट करें और दोनों की तुलना करें।

+0

यह समस्या है, मुझे पता नहीं है कि क्लाइंट टाइमगोन नहीं जानता है कि ग्राहक नेविगेट किया जाएगा, यह कहीं से भी हो सकता है। अगर मैं उस जानकारी को किसी भी तरह से प्राप्त कर सकता हूं, तो यह सहायक होगा, लेकिन मुझे नहीं पता कि कैसे। – Steven

+0

फिर मैं जानना चाहता हूं कि आप ग्राहक से समय कैसे प्राप्त करते हैं। क्योंकि मुझे एक ही समस्या है और मैंने इसे सभी संपर्कों के स्थान का उपयोग करके हल किया है। मैं एक टाइमज़ोन से जुड़े शहरों के स्थान का उपयोग करता हूं। – Khan

1

क्या आपको स्थान या मशीन का समय क्षेत्र जानने की आवश्यकता है?

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

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

यह आसानी से ग्राहक पक्ष किया जाता है।new Date().getTimezoneOffset() यूटीसी और स्थानीय समय के बीच मिनटों की संख्या देता है। जैसे वर्तमान में मैं आयरिश समर टाइम (जीएमटी + 1 हॉर डेलाइट सेविंग टाइम) में हूं, और यह रिटर्न -60 है।

आप आसानी से किसी छवि या एक्सएचआर अनुरोध द्वारा उपयोग किए गए यूआरआई में डाल सकते हैं, या इसे कुकी मूल्य में डाल सकते हैं।

संबंधित मुद्दे