2012-08-27 21 views
6

जावास्क्रिप्ट लाइब्रेरी का उपयोग करना Date.js मुझे लगता है कि जब मैं Date.parse() में पास करता हूं तो एक आईएसओ 8601 स्वरूपित यूटीसी 0 दिनांक कार्य करता है मुझे एक ऑब्जेक्ट मिल रहा है जो प्रतिनिधि है उसी तारीख के लेकिन स्थानीय समय क्षेत्र के साथ जोड़ा गया।डेट.जेएस एक आईएसओ 8601 यूटीसी तिथि को गलत तरीके से पार्सिंग

उदाहरण के लिए

,

तारीख को देखते हुए: 2012-08-27T14: 57: 00Z है, जो 14:57 यूटीसी के समय दिखा रहा है (आईएसओ 8601 प्रारूप में), क्यों इस रूप में पार्स किया जाएगा 14:57 जीएमटी -400 10:57 जीएमटी -400 के विरोध में?

मेरे पास created a fiddle है जो इसे क्रिया में दिखाने के लिए है।

कृपया मुझे बताएं कि वास्तव में कोई त्रुटि है या यदि पार्सिंग परिणाम की मेरी समझ गलत है।

उत्तर

10

हाँ, यह एक बग है - यहां तक ​​कि a reported one

क्या मैं इसके बजाय Moment.js लाइब्रेरी का उपयोग करने की सलाह दे सकता हूं? उदाहरण के लिए, this के लिए:

console.log(moment('2012-08-27T14:57:00Z').toString());

... सही ढंग से पहचान लेगा कि UTC समय दिया जाता है।

+3

आगे की समीक्षा के बाद, यह पता चला है कि डेवलपर अब डेट.जेएस का उपयोग नहीं कर रहे हैं (यह लिंक https://plus.google.com/113127438179392830442/posts/htwWUqxHmUY देखें)। लोगों को पल करने के लिए निर्देशित करने के लिए अच्छा नोट। – MindWire

+0

मैं पहले Moment.js में क्यों नहीं आया, उत्कृष्ट पुस्तकालय, अच्छी कॉल @ raina77ow :) – DIGGIDY

2

यह date.js. के साथ एक त्रुटि की तरह लगता है। new Date('2012-08-27T14:57:00Z') का उपयोग सही तिथि देता है।

+0

यह पता चला हाँ, यह date.js. में एक बग है मुझे 2008 से कोई नया विकास नहीं दिख रहा है, इसलिए मुझे लगता है कि इसे कभी तय नहीं किया जा रहा है। यह नोट करने के लिए धन्यवाद कि यह नई तिथि (...) के साथ काम करता है, क्योंकि यह तय होगा कि मैं उस समय के लिए उपयोग करूंगा। – MindWire

1

यह डेटजेएस के बजाय अन्यथा भयानक व्याकरण पार्सर के एक छोटी गाड़ी कार्यान्वयन के कारण होता है।

मूल रूप से पुराना संस्करण सिर्फ यह देखने के लिए जांच करता है कि क्या यह अंतर्निहित पार्सर का उपयोग कर सकता है, नया संस्करण व्याकरण पार्सिंग का उपयोग करने का प्रयास करता है लेकिन पहले उस मूल चरण को आजमाने की कोशिश करता है और व्याकरण पार्सर टाइमज़ोन का उपयोग करने में विफल रहता है (जो एक है बग, लेकिन एक अलग एक)। यहाँ

$D.parse = function (s) { 
    var date, time, r = null; 
    if (!s) { 
     return null; 
    } 
    if (s instanceof Date) { 
     return s; 
    } 

    date = new Date(Date._parse(s)); 
    time = date.getTime(); 
    // The following will be FALSE if time is NaN which happens if date is an Invalid Date 
    // (yes, invalid dates are still date objects. Go figure.) 
    if (time === time) { 
     return date; 
    } else { 
     // try our grammar parser 
     try { 
      r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1")); 
     } catch (e) { 
      return null; 
     } 
     return ((r[1].length === 0) ? r[0] : null); 
    } 
}; 
कोर कोड को

अद्यतन संस्करण (और भविष्य में खुला बगों किया जाएगा) उपलब्ध:

इस एक साथ पार्स समारोह की जगह

https://github.com/abritinthebay/datejs/

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