2011-10-05 6 views
7

से शुरू होता है, तो यह पुष्टि की मांग कर रहा है कि यह जावास्क्रिप्ट की दिनांक .parse विधि के साथ एक व्यापक दस्तावेज़ीकरण और/या कार्यान्वयन बग है।जावास्क्रिप्ट दिनांक। स्पेस बग जब डैश-डिलीमिट किया गया और वर्ष

जिन दस्तावेज़ों का मैं उल्लेख कर रहा हूं वे https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse पर हैं और वे कहते हैं, 'यदि आप समय क्षेत्र निर्दिष्ट नहीं करते हैं, तो स्थानीय समय क्षेत्र माना जाता है।'

लेकिन निम्न कोड से पता चलता है कि, का समय क्षेत्र नहीं होने के बावजूद, स्थानीय समय, नहीं मान लिया जा रहा है (बल्कि मेरे समय क्षेत्र ऑफसेट लागू किया जा रहा है) है अगर स्ट्रिंग Date.parse के लिए पारित 4- साथ शुरू होता है अंक वर्ष का प्रतिनिधित्व, और डैश-सीमित है।

var euroStyleDate = '2011-10-04'; 
var amerStyleDate = '10/04/2011'; 
var euroStyleParsed = Date.parse(euroStyleDate); 
var amerStyleParsed = Date.parse(amerStyleDate); 

console.log(euroStyleParsed); //1317686400000 
console.log(amerStyleParsed); //1317700800000 

console.log(new Date(euroStyleParsed)); 
//Date {Mon Oct 03 2011 20:00:00 GMT-0400 (Eastern Daylight Time)} 
console.log(new Date(amerStyleParsed)); 
//Date {Tue Oct 04 2011 00:00:00 GMT-0400 (Eastern Daylight Time)} 

अन्य मामले भी हो सकते हैं, और मुझे यकीन है कि अगर मैं गलत हूं तो मैं इसे खोजने वाला पहला व्यक्ति नहीं हूं। तो पुष्टि से परे, अगर किसी को प्रासंगिक लिंक के बारे में पता है तो मुझे निश्चित रूप से इस बारे में अधिक गहन जानकारी पर ध्यान देना अच्छा लगेगा।

मैं इसे एफएफ 3, विंडोज़ के लिए क्रोम में अनुभव कर रहा हूं और निश्चित रूप से केवल विशेष आईई 8 होने के लिए भी 2011-10-04 पर रूपांतरण करने में सक्षम नहीं लगता है: मुझे बस एक खाली स्ट्रिंग मिल रही है मेरे आवेदन में

किसी और अंतर्दृष्टि या संसाधनों के लिए अग्रिम धन्यवाद।

उत्तर

8

* अद्यतन: * ऐसा लगता है कि यहां काम पर कई अलग अलग मानकों देखते हैं जैसे:

  1. EMCAScript < 5 मानक standard IETF format में दिनांक के लिए अनुमति दी है, उदा Sun Oct 03 2010। इन तिथियों के साथ, स्थानीय टाइमज़ोन माना जाता है।

  2. ECMAScript 5 में, एक limited version of the ISO 8601 standard भी अनुमति दी है, उदाहरण के लिए 2010-10-03। यह प्रतीत होता है (शायद आईएसओ 8601 के बाद?) कि इस मामले में, यूटीसी टाइमज़ोन माना जाता है कि अगर कोई निर्दिष्ट नहीं है।

  3. मैं एक कल्पना का कहना है कि Date.parsemm/dd/yyyy दिनांकों संभाल कर सकते हैं नहीं मिला है, लेकिन मेरी ब्राउज़र (क्रोम 14) स्पष्ट रूप से कर सकते हैं, और शायद अन्य ब्राउज़रों भी कर सकते हैं। ऐसा लगता है कि स्थानीय टाइमज़ोन मानते हुए उपरोक्त मानक 1 का पालन करना प्रतीत होता है। यह देखते हुए कि यह कल्पना में नहीं है, फिर भी, मैं सिफारिश करेंगे इस संस्करण का उपयोग नहीं, के रूप में यह ब्राउज़र पर निर्भर होने की संभावना है (और मैं पता नहीं है कि क्या 10-03-2010 एक अलग तिथि में परिणाम होगा अगर मैं एक यूरोपीय स्थान पर सेट किया था है मेरा ब्राउज़र)।

सबसे दुभाषिए में देशी Date.parse समारोह के साथ कुछ मुद्दों कर रहे हैं - मैं आपको अक्सर अपनी वर्णन की तरह समय क्षेत्र के मुद्दों पड़ा है। तो सामान्य रूप से, मैं या तो Datejs जैसी लाइब्रेरी का उपयोग करता हूं या मैं अपना खुद का पार्सिंग फ़ंक्शन लिखता हूं। DateTime module of the SIMILE AJAX library आईएसओ 8601 दिनांक पार्स करने के लिए एक बहुत अच्छा उदाहरण समारोह (क्या आप euroStyleDate के रूप में संदर्भ दे रहे-साथ एक वैकल्पिक समय घटक) है।

दिनांक निर्धारित करते समय, मैं आमतौर पर new Date() का उपयोग करता हूं और फिर setUTC*() फ़ंक्शन का उपयोग करता हूं ताकि अलग-अलग दिनांक तत्वों को मेरी वांछित परिशुद्धता में सेट किया जा सके। यह सही नहीं है, लेकिन कम से कम आप एक स्पष्ट टाइमज़ोन से निपट रहे हैं।

+0

खैर हम ExtJS का उपयोग कर रहे हैं और यह ब्राउज़र की देशी तिथि पार्स :( –

+0

पर वापस गिर जाता है मेरा मानना ​​है कि Datejs देशी 'Date.parse' विधि ओवरराइड करता है, तो यह है कि चाल कर सकता है। – nrabinowitz

+0

FYI करें, देखना मेरी ऊपर अपडेट करें - मैंने चश्मे के चारों ओर थोड़ा सा देखा। – nrabinowitz

12

मैं भी इस अवधारणा में भाग गया।किसी भी व्यक्ति के लिए "जावास्क्रिप्ट तिथियां डैश स्लैश" जैसे कि मैं था, यह सबसे स्पष्ट प्रदर्शन है कि मैं इस बारे में सोच सकता हूं कि यहां क्या हो रहा है।

संक्षेप में, स्लेश का मतलब स्थानीय समय क्षेत्र है, और डैश का मतलब यूटीसी है। अन्य उत्तरों के बारे में स्पष्टीकरण क्यों है।

<script type="text/javascript"> 

var 
testB = new Date("2012/02/09"), 
testC = new Date("2012-02-09"); 


alert(testB.toString()); 
alert(testC.toString()); 
alert(testC.toUTCString()); 
</script> 
+0

और फिर भी यदि आप खाली समय स्पेक जोड़ते हैं, तो डैश का मतलब स्थानीय समय फिर से होता है? क्रोम में: 'नई तिथि (' 2014-03-03 ')' को स्थानीय समय में परिवर्तित कर दिया जाता है आधी रात यूटीसी (-5h मेरे लिए) से, लेकिन 'नई तारीख (' 2014-03-03: 00: 00: 00 ') मध्यरात्रि स्थानीय समय है। अजीब। – patricksurry

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