2009-02-05 5 views
29

मैं पिछले कुछ घंटों से इस विषय पर पढ़ रहा हूं, और मुझे लगता है कि मुझे इस पर एक संभाल है, लेकिन मुझे कुछ पुष्टि चाहिए।PHP में अलग-अलग समय क्षेत्रों में स्टोरिंग/प्रदर्शित करने की तारीखों को संभालने का सबसे अच्छा तरीका?

स्थिति

मुझे लगता है कि MySQL में संग्रहीत किया जाएगा एक टिप्पणी पोस्ट करने में सक्षम होने के लिए, कहते हैं, कैलिफोर्निया एक उपयोगकर्ता चाहते हैं। मैं फिर उपयोगकर्ता को अपने समय क्षेत्र में समायोजित पोस्ट डेट के साथ टिप्पणी देखने में सक्षम होना चाहता हूं।

प्रस्तावित समाधान

भंडारण

  1. भागो आवेदन के शुरू में निम्नलिखित ताकि सभी तिथि कार्यों UTC समयज़ोन का उपयोग करें: date_default_timezone_set('UTC');
  2. $Date = new DateTime(); साथ दिनांक समय वस्तु प्राप्त करने के लिए यूटीसी में वर्तमान तिथि और समय।
  3. MySQL में डेटाटाइम प्रकार कॉलम में डालने के लिए मान प्राप्त करने के लिए $Date->format() का उपयोग करें।

प्रदर्शित

  1. जावास्क्रिप्ट से उपयोगकर्ता के समय क्षेत्र में जानकारी प्राप्त करें और एक कुकी में संग्रहीत।
  2. डेटाटाइम कॉलम मान पुनर्प्राप्त करने के लिए एक MySQL SELECT क्वेरी चलाएं।
  3. $Date = new DateTime($row['time']); संग्रहीत यूटीसी समय के साथ डेटटाइम ऑब्जेक्ट को तुरंत चालू करने के लिए। उपयोगकर्ता के टाइमज़ोन में यूटीसी समय समायोजित करने के लिए
  4. $Date->setTimezone(new DateTimeZone($userTimezone));
  5. $Date->format();

का उपयोग करके प्रदर्शन करता है क्या का सार किया जाना है? क्या मुझे बेहतर समाधान याद आ रहा है? आपकी सहायताके लिए धन्यवाद!

उत्तर

14

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

  1. स्टोर यूटीसी के रूप में सर्वर पर हर समय
  2. यूटीसी के रूप में ग्राहक के लिए उन्हें परोसें
  3. क्लाइंट का उपयोग करता है जावास्क्रिप्ट स्थानीय समय क्षेत्र के लिए समय समायोजित

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

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

+0

मुझे लगता है कि मैं उपयोगकर्ता लॉगिन पर टाइमज़ोन कुकी सेट करने जा रहा हूं, इसलिए यदि आप ऑस्ट्रेलिया यात्रा करते हैं और वहां से लॉगिन करते हैं तो इसे अपडेट करना चाहिए। क्या आप सुझाव दे रहे हैं कि कुछ जावास्क्रिप्ट पेज लोड पर चलते हैं जो कहते हैं, और उन्हें फ्लाई पर परिवर्तित करता है? –

+0

उपयोगकर्ता घड़ी पर जाने का एकमात्र तरीका जेएस या भू-आईपी के माध्यम से है। लेटर जटिल और अविश्वसनीय है। यदि आप किसी भी मामले में जेएस का उपयोग करने जा रहे हैं, तो इसे लॉगिन समय पर करने के लिए अधिक घर की देखभाल (सर्वर साइड ट्रैकिंग) की आवश्यकता होती है। फ्लाई पर इसे करने से यहां और अधिक समझ आता है। – aleemb

+0

धन्यवाद। जैसे-जैसे मैं इसे और अधिक शोध करता हूं, मैं आपके साथ सहमत होना शुरू कर रहा हूं। –

3

आप इसे सभी अधिकार कर रहे हैं। यूटीसी (जीएमटी + 0) में सभी तिथियां स्टोर करें, उन्हें डेटाबेस से पुनर्प्राप्त करें और उपयोगकर्ता के ऑफसेट को लागू करें।

अनिवार्य रूप से, आप इसे सभी को शुरू से ही खत्म करने के लिए कवर कर चुके हैं, वास्तव में जोड़ने के लिए कुछ भी नहीं है, मुझे नहीं लगता कि आप इसे पहले से ही कर सकते हैं।

+0

मैं सहमत हूं, यही वह है जो मैं करूँगा। – Ross

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

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