संक्षिप्त उत्तर
कोई "सार्वभौमिक" दस्तावेज नहीं है जो जावास्क्रिप्ट को पूरा करता है; प्रत्येक ब्राउज़र जिसमें जावास्क्रिप्ट है वास्तव में एक कार्यान्वयन है। हालाँकि, एक मानक है जिसे अधिकांश आधुनिक ब्राउज़र अनुसरण करते हैं, और वह है EMCAScript मानक; ECMAScript मानक के तार न्यूनतम रूप से आईएसओ 8601 परिभाषा के संशोधित कार्यान्वयन में लगेंगे।
इसके अतिरिक्त, IETF द्वारा आगे एक दूसरा मानक सेट है जो कि ब्राउज़र भी अनुसरण करते हैं, जो कि RFC 2822 में किए गए टाइमस्टैम्प की परिभाषा है। वास्तविक प्रलेखन नीचे दी गई संदर्भ सूची में पाया जा सकता है।
इससे आप बुनियादी कार्यक्षमता की उम्मीद कर सकते हैं, लेकिन जो "होना चाहिए" वह स्वाभाविक रूप से "क्या" नहीं है। मैं इस प्रक्रिया के साथ थोड़ी गहराई में जा रहा हूं, हालांकि, ऐसा प्रतीत होता है कि वास्तव में केवल तीन लोगों ने सवाल का जवाब दिया (स्कॉट, गूफबॉल लॉजिक, और पेलर), जो कि, मेरे लिए, ज्यादातर लोगों का सुझाव है कि वास्तव में क्या होता है इससे अनजान हैं दिनांक ऑब्जेक्ट बनाएँ।
दीर्घ उत्तर
वह दस्तावेज़ कहाँ है जो दिनांक () ऑब्जेक्ट द्वारा समर्थित प्रारूप निर्दिष्टकर्ताओं को सूचीबद्ध करता है?
प्रश्न का उत्तर देने के लिए, या आम तौर पर इस प्रश्न का उत्तर खोजने के लिए, आपको यह जानना होगा कि जावास्क्रिप्ट एक उपन्यास भाषा नहीं है; यह वास्तव में ECMAScript का कार्यान्वयन है, और ECMAScript मानकों का अनुसरण करता है (लेकिन ध्यान दें, जावास्क्रिप्ट भी वास्तव में उन मानकों को पूर्व दिनांकित करता है; EMCAScript मानकों को LiveScript / JavaScript के प्रारंभिक कार्यान्वयन से बनाया गया है)। वर्तमान ECMAScript मानक 5.1 (2011) है; उस समय जब प्रश्न मूल रूप से पूछा गया था (जून '09), मानक 3 था (4 को छोड़ दिया गया था), लेकिन 5 2009 के अंत में पोस्ट के तुरंत बाद जारी किया गया था। यह एक समस्या को रेखांकित करना चाहिए; एक जावास्क्रिप्ट कार्यान्वयन किस मानक का पालन कर सकता है, यह प्रतिबिंबित नहीं कर सकता है कि वास्तव में क्या है क्योंकि, क) यह किसी दिए गए मानक का कार्यान्वयन है, बी) मानक के सभी कार्यान्वयन प्यूरिटन नहीं हैं,
अनिवार्य रूप से, जब जावास्क्रिप्ट के साथ काम कर रहे हैं, तो आप एक कार्यान्वयन (जावास्क्रिप्ट खुद के लिए ब्राउज़र के लिए विशिष्ट) (जावास्क्रिप्ट के साथ काम कर रहे हैं)। उदाहरण के लिए, Google का V8, ECMAScript 5.0 को लागू करता है, लेकिन Internet Explorer का JScript किसी भी ECMAScript मानक के अनुरूप होने का प्रयास नहीं करता है, फिर भी Internet Explorer 9 ECMAScript 5.0 के अनुरूप है।
जब किसी एकल तर्क को नई तिथि () में पारित किया जाता है, तो वह इस फ़ंक्शन को प्रोटोटाइप बनाता है:
new Date(value)
जब दो या अधिक तर्क नई तिथि () को दिए जाते हैं, तो यह इस फ़ंक्शन को प्रोटोटाइप बनाता है:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
उन दोनों कार्यों को परिचित होना चाहिए, लेकिन यह तुरंत आपके सवाल का जवाब नहीं देता है और एक स्वीकार्य "तिथि प्रारूप" के रूप में क्या मात्रा निर्धारित करता है, इसके लिए और स्पष्टीकरण की आवश्यकता है। जब आप नई तिथि () को एक स्ट्रिंग पास करते हैं, तो यह प्रोटोटाइप को कॉल करेगा (ध्यान दें कि मैं प्रोटोटाइप शब्द का उपयोग शिथिल रूप से कर रहा हूं ; संस्करण व्यक्तिगत कार्य हो सकते हैं, या यह किसी एकल फ़ंक्शन में सशर्त विवरण का हिस्सा हो सकता है) "मूल्य" पैरामीटर के तर्क के रूप में आपकी स्ट्रिंग के साथ नई तिथि (मान) । यह फ़ंक्शन पहले जांच करेगा कि यह एक संख्या है या एक स्ट्रिंग है। इस समारोह के लिए दस्तावेज यहां देखे जा सकते हैं:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
इससे, हम यह घटा सकते हैं कि नई तिथि (मान) के लिए अनुमत स्ट्रिंग प्रारूपण प्राप्त करने के लिए, हमें Date.parse (स्ट्रिंग) विधि को देखना होगा। इस विधि के लिए प्रलेखन यहाँ पाया जा सकता है:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
और हम आगे यह अनुमान लगा सकते हैं कि तारीखें संशोधित आईएसओ 8601 विस्तारित प्रारूप में होने की उम्मीद है, जैसा कि यहां बताया गया है:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
हालाँकि, हम अनुभव से यह पहचान सकते हैं कि जावास्क्रिप्ट की दिनांक ऑब्जेक्ट अन्य स्वरूपों को स्वीकार करती है (पहली जगह में इस प्रश्न के अस्तित्व द्वारा लागू), और यह ठीक है क्योंकि ECMAScript विशिष्ट प्रारूपों को लागू करने की अनुमति देता है। हालाँकि, यह अभी भी इस सवाल का जवाब नहीं देता है कि उपलब्ध प्रारूपों पर क्या प्रलेखन उपलब्ध है, और न ही वास्तव में किन प्रारूपों की अनुमति है। हम Google के जावास्क्रिप्ट कार्यान्वयन, V8 को देखने जा रहे हैं; कृपया ध्यान दें कि मैं यह सुझाव नहीं दे रहा हूं कि यह "सर्वश्रेष्ठ" जावास्क्रिप्ट इंजन है (कोई व्यक्ति "सर्वश्रेष्ठ" या "अच्छा" कैसे परिभाषित कर सकता है) और कोई यह नहीं मान सकता है कि V8 में दिए गए प्रारूप आज उपलब्ध सभी स्वरूपों का प्रतिनिधित्व करते हैं, लेकिन मुझे लगता है कि यह उचित है यह मानने के लिए कि वे आधुनिक अपेक्षाओं का पालन करते हैं।
Google का V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
DateConstructor फ़ंक्शन को देखते हुए, हम DateParse फ़ंक्शन को खोजने के लिए आवश्यक घटा सकते हैं; हालाँकि, ध्यान दें कि "वर्ष" वास्तविक वर्ष नहीं है और केवल "वर्ष" पैरामीटर का संदर्भ है।
Google का V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
यह% DateParseString को कॉल करता है, जो वास्तव में C ++ फ़ंक्शन के लिए एक रन-टाइम फ़ंक्शन संदर्भ है। यह निम्नलिखित कोड को संदर्भित करता है:
Google का V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
इस फ़ंक्शन में हम जिस फ़ंक्शन कॉल से चिंतित हैं, वह DateParser :: Parse () के लिए है; उन फ़ंक्शन कॉल के आसपास के तर्क को अनदेखा करें, ये एन्कोडिंग प्रकार (ASCII और UC16) के अनुरूप हैं। DateParser :: पार्स यहाँ परिभाषित किया गया है:
Google का V8, dateparser -ll.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
यह वह फ़ंक्शन है जो वास्तव में परिभाषित करता है कि यह किस प्रारूप को स्वीकार करता है। अनिवार्य रूप से, यह EMCAScript 5.0 आईएसओ 8601 मानक के लिए जाँच करता है और यदि यह मानकों के अनुरूप नहीं है, तो यह विरासत स्वरूपों के आधार पर तारीख बनाने का प्रयास करेगा। टिप्पणियों के आधार पर कुछ मुख्य बिंदु:
- पहले नंबर से पहले जो शब्द पार्सर से अनजान हैं, उन्हें अनदेखा कर दिया जाता है।
- कोष्ठक पाठ को अनदेखा किया जाता है।
- “और” के बाद अनसाइन किए गए नंबरों की व्याख्या “समय घटक” के रूप में की जाती है।
- इसके बाद अनसाइन किए गए नंबर "।" एक "समय घटक" के रूप में व्याख्या की जाती है, और इसे मिलीसेकंड के बाद किया जाना चाहिए।
- घंटे या घंटे मिनट (जैसे +5: 15 या +0515) के बाद हस्ताक्षरित संख्याओं को समयक्षेत्र के रूप में व्याख्या की जाती है।
- घंटे और मिनट की घोषणा करते समय, आप "hh: mm" या "hhmm" का उपयोग कर सकते हैं।
- शब्द जो समय क्षेत्र को इंगित करते हैं, उन्हें समय क्षेत्र के रूप में व्याख्या की जाती है।
- अन्य सभी संख्याओं की व्याख्या "तिथि घटक" के रूप में की जाती है।
- एक महीने के पहले तीन अंकों के साथ शुरू होने वाले सभी शब्दों को महीने के रूप में व्याख्या की जाती है।
- आप मिनटों और घंटों को दोनों स्वरूपों में एक साथ परिभाषित कर सकते हैं: "hh: mm" या "hhmm"।
- एक नंबर संसाधित होने के बाद "+", "-" और बेजोड़ "" जैसे प्रतीकों की अनुमति नहीं है।
- कई प्रारूपों (जैसे 1970-01-01) से मेल खाने वाली वस्तुओं को मानक अनुरूप EMCAScript 5.0 ISO 8601 स्ट्रिंग के रूप में संसाधित किया जाता है।
तो यह आपको एक मूल विचार देने के लिए पर्याप्त होना चाहिए कि जब किसी दिनांक ऑब्जेक्ट में स्ट्रिंग पास करने की बात आती है, तो क्या उम्मीद करें। आप निम्नलिखित विनिर्देश को देखकर इस पर विस्तार कर सकते हैं कि मोज़िला मोज़िला डेवलपर नेटवर्क पर इंगित करता है (IETF RFC 2822 टाइमस्टैम्प के अनुरूप):
http://tools.ietf.org/html/rfc2822#page-14
Microsoft डेवलपर नेटवर्क अतिरिक्त रूप से दिनांक ऑब्जेक्ट के लिए एक अतिरिक्त मानक का उल्लेख करता है: ECMA-402, ECMAScript अंतर्राष्ट्रीयकरण एपीआई विशिष्टता, जो ECMAScript 5.1 मानक (और भविष्य के) का पूरक है। यहाँ पाया जा सकता है:
http://www.ecma-international.org/ecma-402/1.0/
किसी भी मामले में, यह उजागर करने में सहायता करनी चाहिए कि कोई भी "प्रलेखन" नहीं है जो सार्वभौमिक रूप से जावास्क्रिप्ट के सभी कार्यान्वयन का प्रतिनिधित्व करता है, लेकिन अभी भी पर्याप्त प्रलेखन उपलब्ध है जो यह दर्शाता है कि तार एक तिथि वस्तु के लिए क्या स्वीकार्य हैं। जब आप इसके बारे में सोचते हैं, तो लोड किए गए प्रश्न को पूरा करें? : पी
संदर्भ
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ecma-international.org/ecma-402/1.0/
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
साधन
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx