पृष्ठभूमि
जावास्क्रिप्ट का Date
UTC में वस्तु समय को आंतरिक रूप से ट्रैक करती है, लेकिन आमतौर पर इनपुट को स्वीकार करती है और इसके द्वारा चलाए जा रहे कंप्यूटर के स्थानीय समय में आउटपुट उत्पन्न करती है। अन्य समय क्षेत्रों में समय के साथ काम करने के लिए इसमें बहुत कम सुविधाएं हैं।
किसी Date
ऑब्जेक्ट का आंतरिक प्रतिनिधित्व एक एकल संख्या है, जो 1970-01-01 00:00:00 UTC
लीप सेकंड की परवाह किए बिना, मिलीसेकंड की संख्या का प्रतिनिधित्व करती है । दिनांक ऑब्जेक्ट में कोई समय क्षेत्र या स्ट्रिंग प्रारूप संग्रहीत नहीं है। जब के विभिन्न कार्यDate
ऑब्जेक्ट के उपयोग किया जाता है, तो कंप्यूटर का स्थानीय समय क्षेत्र आंतरिक प्रतिनिधित्व पर लागू होता है। यदि फ़ंक्शन एक स्ट्रिंग का उत्पादन करता है, तो उस स्ट्रिंग का उत्पादन कैसे करें, यह निर्धारित करने के लिए कंप्यूटर की स्थानीय जानकारी पर ध्यान दिया जा सकता है। विवरण प्रति फ़ंक्शन अलग-अलग होते हैं, और कुछ कार्यान्वयन-विशिष्ट होते हैं।
Date
गैर-स्थानीय समय क्षेत्रों के साथ ऑब्जेक्ट केवल वही कार्य कर सकता है:
यह किसी भी समय क्षेत्र से एक संख्यात्मक UTC ऑफसेट युक्त स्ट्रिंग को पार्स कर सकता है। इसका उपयोग पार्स किए जा रहे मूल्य को समायोजित करने के लिए करता है, और यूटीसी समकक्ष को संग्रहीत करता है। मूल स्थानीय समय और ऑफसेट परिणामी Date
वस्तु में बरकरार नहीं हैं । उदाहरण के लिए:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toISOString() //=> "2020-04-12T16:00:00.000Z"
d.valueOf() //=> 1586707200000 (this is what is actually stored in the object)
ECMASCript अंतर्राष्ट्रीयकरण एपीआई (उर्फ "Intl") को लागू करने वाले वातावरण में , एक Date
वस्तु एक निश्चित समय क्षेत्र पहचानकर्ता के लिए समायोजित स्थानीय-विशिष्ट स्ट्रिंग का उत्पादन कर सकती है। यह timeZone
विकल्प toLocaleString
और इसकी विविधताओं के माध्यम से पूरा किया जाता है । अधिकांश कार्यान्वयन IANA समय क्षेत्र पहचानकर्ताओं का समर्थन करेंगे, जैसे कि 'America/New_York'
। उदाहरण के लिए:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toLocaleString('en-US', { timeZone: 'America/New_York' })
//=> "4/12/2020, 12:00:00 PM"
// (midnight in China on Apring 13th is noon in New York on April 12th)
अधिकांश आधुनिक वातावरण IANA समय क्षेत्र पहचानकर्ताओं के पूर्ण सेट का समर्थन करते हैं ( यहां संगतता तालिका देखें )। हालांकि, ध्यान रखें कि Intl द्वारा समर्थित एकमात्र पहचानकर्ता आवश्यक है 'UTC'
, इस प्रकार आपको पुराने ब्राउज़र या atypical वातावरण (उदाहरण के लिए, हल्के IoT डिवाइस) का समर्थन करने की आवश्यकता होने पर सावधानीपूर्वक जांच करनी चाहिए।
पुस्तकालय
कई पुस्तकालय हैं जिनका उपयोग समय क्षेत्रों के साथ काम करने के लिए किया जा सकता है। हालांकि वे अभी भी Date
वस्तु को किसी भी तरह से व्यवहार नहीं कर सकते हैं , वे आम तौर पर मानक IANA टाइमज़ोन डेटाबेस को लागू करते हैं और जावास्क्रिप्ट में इसका उपयोग करने के लिए कार्य प्रदान करते हैं। आधुनिक लाइब्रेरी Intl API द्वारा आपूर्ति किए गए समय क्षेत्र के डेटा का उपयोग करते हैं, लेकिन पुराने पुस्तकालयों में आमतौर पर ओवरहेड होता है, खासकर यदि आप वेब ब्राउज़र में चल रहे हैं, क्योंकि डेटाबेस थोड़ा बड़ा हो सकता है। इन पुस्तकालयों में से कुछ भी आपको डेटा सेट को चुनिंदा रूप से कम करने की अनुमति देते हैं, या तो जिस समय तक ज़ोन का समर्थन किया जाता है और / या आपके द्वारा काम करने की तारीखों की सीमा तक।
यहाँ पुस्तकालयों पर विचार करना है:
Intl- आधारित पुस्तकालय
नए विकास को इनमें से किसी एक कार्यान्वयन से चुनना चाहिए, जो अपने समय क्षेत्र डेटा के लिए Intl API पर निर्भर है:
गैर-अंतर्देशीय पुस्तकालय
इन पुस्तकालयों को बनाए रखा जाता है, लेकिन पैकेजिंग का बोझ अपने समय क्षेत्र के डेटा पर ले जाता है, जो काफी बड़ा हो सकता है।
* जबकि मोमेंट और मोमेंट-टाइमज़ोन पहले अनुशंसित थे, मोमेंट टीम अब नए विकास के लिए लक्सॉन को चुनती है।
पुस्तकालयों को बंद कर दिया
इन पुस्तकालयों को आधिकारिक रूप से बंद कर दिया गया है और अब इनका उपयोग नहीं किया जाना चाहिए।
भविष्य के प्रस्ताव
TC39 टेम्पोरल प्रस्ताव उद्देश्य जावास्क्रिप्ट भाषा अपने आप में दिनांक और समय के साथ काम करने के लिए मानक वस्तुओं का एक नया सेट प्रदान करते हैं। इसमें टाइम ज़ोन जागरूक ऑब्जेक्ट के लिए समर्थन शामिल होगा।