2011-06-15 9 views
5

मुझे एक वेब एप्लिकेशन लिखना होगा जो विभिन्न लोकेल में लोगों की घटनाओं को दिखाए। मैं लगभग यह समाप्त हो गया है, लेकिन वहाँ 2 तारीख के साथ समस्याओं कर रहे हैं:विभिन्न लोकेल और टाइमज़ोन में जावास्क्रिप्ट दिनांक ऑब्जेक्ट

  • तारीख जावास्क्रिप्ट वस्तु, तिथि उपयोगकर्ता कंप्यूटर सेटिंग्स पर निर्भर करता है का उपयोग करते हुए और यह विश्वसनीय
  • वहाँ dfferent समयक्षेत्र संबंध में एक ही स्थान पर एक घटना है कि अगर नहीं है उपयोगकर्ता वर्तमान स्थिति, मुझे इसे () के अंदर प्रिंट करना होगा। क्या जावास्क्रिप्ट में किसी दिए गए टाइमज़ोन और डेलाइट सेटिंग्स के साथ डेट ऑब्जेक्ट बनाने के लिए यह संभव है?

मैं भी इस तरह के jsdate और तारीख webservices के रूप में, कुछ वैकल्पिक हल मिल जाए, लेकिन वे इस तरह के जोड़ते समय कुछ दिनों और इतने पर के रूप में सही समय क्षेत्र और दिन के उजाले सेटिंग्स (दिनांक ऑपरेशन के लिए के साथ एक जावास्क्रिप्ट वस्तु होने की समस्या को दूर नहीं करते)।

उत्तर

0

एक संभावना यूटीसी तिथि और सब कुछ के लिए समय का उपयोग करने की संभावना हो सकती है। इस तरह, बदलने के लिए कुछ भी नहीं है।

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

2

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

+2

एक दिन जोड़ना वास्तव में समय क्षेत्र शामिल करता है। सभी दिन 24 घंटे लंबी नहीं हैं। समय क्षेत्र, डेलाइट सेविंग नियमों और प्रश्न में विशेष तिथि के आधार पर, कैलेंडर दिन 23, 24, या 25 घंटे लंबा हो सकता है (या ऐतिहासिक समय क्षेत्रों के बारे में बात करते समय अन्य अजीब मूल्य)। तो यह हमेशा 86400000 जोड़ने का एक साधारण मामला नहीं है। –

+1

शायद सवाल underspecified है। यदि सुबह 2:30 बजे है, तो समय-क्षेत्र आगे बढ़ने से पहले, "दिन जोड़ने" का क्या अर्थ है? – Malvolio

+2

बिल्कुल। यदि आपका मतलब है "24 घंटे जोड़ना", तो आप ठीक हैं। लेकिन ज्यादातर लोग इन संक्रमणों को अदृश्य होने के बारे में सोचते हैं क्योंकि वे आमतौर पर सोते समय सो जाते हैं। तो यदि आप एक आम आदमी से पूछते हैं कि 2:30 बजे से 1 दिन क्या होगा, तो वे 2:30 बजे उम्मीद कर रहे हैं - संभव नहीं 1:30 पूर्वाह्न या 3:30 पूर्वाह्न। लोग कैलेंडरों के मामले में सोचते हैं, भले ही वे कैलेंडर शिफ्ट हो। :) –

0

उपयोग getUTCDate(), getUTCHours() ... getDate() के बजाय, getHours() ... getTimetoneOffset() उपयोगी भी हो सकता है।

6

कुछ चीजों को ध्यान में रखना है।

स्टोर UTC समय

में सभी घटना datetimes हाँ, वहाँ कोई इस चारों ओर हो रही है।

सभी समय ज़ोन जानकारी प्राप्त करें ...

... प्रणाली में सभी उपयोगकर्ताओं के। आप निम्न पहचान स्क्रिप्ट का उपयोग कर सकते हैं: http://site.pageloom.com/automatic-timezone-detection-with-javascript। यह आपको एक टाइमज़ोन कुंजी देगा जैसे उदाहरण के लिए "अमेरिका/फीनिक्स"।

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

अपने प्रदर्शन तंत्र

चुनें कि आप जावास्क्रिप्ट के साथ अपने घटना दिनांक स्थानीय बनाना चाहते हैं, उसके लिए एक गंधा पुस्तकालय भी है (कुंजी पिछले स्क्रिप्ट के साथ आपूर्ति का उपयोग कर सकते हैं)। यहां: https://github.com/mde/timezone-js

कि पुस्तकालय आप उदाहरण के लिए ऐसा कर सकते हैं के साथ

:

var dt = new timezoneJS.Date(UTC_TIMESTAMP, 'America/New_York'); 

या

var dt = new timezoneJS.Date(2006, 9, 29, 1, 59, 'America/Los_Angeles'); 

जहां उदाहरण के लिए UTC_TIMESTAMP 1193855400000 हो सकता है। और America/New_York वह समय है जिसे आपने पाया था जब घटना हुई थी।

dt ऑब्जेक्ट जो आप इससे प्राप्त करते हैं, वह एक सामान्य जावास्क्रिप्ट Date ऑब्जेक्ट के रूप में व्यवहार करेगा। लेकिन स्वचालित रूप से आपके द्वारा निर्दिष्ट टाइमज़ोन (डीएसटी समेत) पर "सही" हो जाएगा।

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

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