2008-10-07 17 views
5

मेरे पास एक बहु-टाइमज़ोन वेब एप्लिकेशन है जो डेटाबेस में यूटीसी में सभी डेटाटाइम मानों को संग्रहीत करता है, जब सर्वर पर कार्रवाई होती है, तो मैं आसानी से समय को यूटीसी में परिवर्तित कर सकता हूं।वेब ऐप के क्लाइंट टाइमज़ोन का पता लगाने और स्टोर करने का सबसे अच्छा तरीका क्या है?

हालांकि, जब कोई ग्राहक समय या समय अवधि में प्रवेश करता है, तो इसका पता लगाने और स्टोर करने का सबसे अच्छा तरीका क्या है?

  1. ICallbackEventHandler के माध्यम से सर्वर-साइड कोड पृष्ठ पर है कि Date.getTimezoneOffset() (जावास्क्रिप्ट)
  2. पोस्ट का मूल्य प्राप्त करें:

    मैं वर्तमान में निम्नलिखित कर रहा हूं।

  3. सत्र में मूल्य
  4. किसी भी बाद के अनुरोध पर, ग्राहक के टाइमज़ोन का उपयोग करके आउटपुट/इनपुट डेटाटाइम मान की गणना करें।

वास्तविक कार्यान्वयन के बावजूद, यह एक सुरुचिपूर्ण समाधान की तरह लगता है। क्या किसी के पास बेहतर तरीका है?

उत्तर

4

मैं कुछ ऐसा ही कर रहा था, लेकिन अब मुझे लगता है कि मैं क्लाइंट पक्ष पर स्थानीय रूप से स्थानीय रूप से परिवर्तित करने के लिए जावास्क्रिप्ट का उपयोग करना पसंद करता हूं। सर्वर जेनरेट पेज में यूटीसी में हर बार देगा, और पृष्ठ लोड होने के बाद जावास्क्रिप्ट इसे परिवर्तित कर देगा।

यह सर्वर साइड कोड पर भ्रम को समाप्त करता है, क्योंकि मुझे हमेशा पता है कि यह कितना समय है (यूटीसी)। क्लाइंट साइड पर मैं jquery और प्रत्येक() फ़ंक्शन का उपयोग सभी समय मानों को एक बार में प्रारूपित करने के लिए कर रहा हूं। मैं jquery के साथ प्रक्रिया को आसान बनाने के लिए एक छिपे हुए क्षेत्र में यूनिक्स समय के रूप में प्रत्येक बार लिखता हूं।

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

+0

यह एक साफ समाधान है, और एक मैं माना जाता है। इसका एकमात्र कारण मैंने उससे दूर किया था, "उलटी गिनती टाइमर" परिदृश्य था, जैसे कि जब उपयोगकर्ता के पास X कार्य करने के लिए X घंटे शेष होते हैं। मुझे लगता है कि उस तर्क को सर्वर पर होना चाहिए, लेकिन मुझे लगता है कि यह जावास्क्रिप्ट में ठीक होगा। –

+0

उपयोगकर्ता पर समय सीमा है जो कुछ भी निश्चित रूप से सर्वर के खिलाफ जांच की जानी चाहिए। उलटी गिनती टाइमर इस प्रश्न से संबंधित प्रतीत होता है: http://stackoverflow.com/questions/198049/prevent-js-alert-from-pausing-timers यह एक समान विचार है कि क्लाइंट साइड सत्यापन धोखाधड़ी के लिए कमजोर है। – Mnebuerquo

+0

@Mnebuerquo अच्छा बिंदु। मुझे शायद एक संकर विधि के साथ जाना होगा। –

2

क्लाइंट द्वारा भेजे गए "अगर-संशोधित-चूंकि" शीर्षलेख से पूछने के लिए आप HttpRequest ऑब्जेक्ट की "हेडर" प्रॉपर्टी का उपयोग कर सकते हैं। इस शीर्ष लेख एक प्रारूप है कि ग्राहक के समय क्षेत्र, इस तरह शामिल है में एक तारीख को शामिल करना चाहिए:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT 

एक साधारण-स्ट्रिंग निष्कर्षण आप समय क्षेत्र कोड दे देंगे। हालांकि, मुझे डर है कि सभी ब्राउज़र उस शीर्षलेख को भेजने में सुसंगत नहीं हैं, इसलिए आपको इसके बारे में कुछ प्रयोग करना चाहिए।

संबंध है, फैब्रिजियो

+1

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

+0

यह वास्तव में कैसे काम करता है? ऐसा लगता है कि हेडर के पास टाइमज़ोन की बजाय gmt है। क्या इसका मतलब है कि ग्राहक का कंप्यूटर जीएमटी पर सेट है या इसका मतलब यह है कि ब्राउज़र हमेशा अनुरोध के लिए जीएमटी का उपयोग कर रहा है? – Mnebuerquo

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

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