2010-09-02 9 views
5

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

मार्सेल कोर्पेल द्वारा बताए गए अनुसार, यह कहता है कि इसे फ़ायरफ़ॉक्स के कार्यान्वयन-विशिष्ट गिरावट का उपयोग करने के लिए वापस आना चाहिए, मैं वास्तव में सोच रहा हूं कि क्यों फ़ायरफ़ॉक्स की गिरावट इस विसंगति को प्रदर्शित करती है।

function isDate(sDate) { 
    var temp = new Date(sDate); 
    if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") { 
     alert("Not a Date"); 
    } else { 
     alert("Is a Date!"); 
    } 
} 
+0

4 रिक्त स्थान के साथ अपने कोड को इंडेंट कृपया, बैकटिक तरह से तुमने किया था का उपयोग नहीं करते। –

+0

एक शाखा में सच है, और किसी और में कुछ भी वापस नहीं ... ???! –

+0

हां, मैं एक त्वरित और गंदा isDate समारोह बनाने की कोशिश कर और वापसी झूठी में जोड़ने के लिए भूल गया था। मुझे इस चर्चा के लिए केवल वापसी को सही करने दें। –

उत्तर

4

आप Date निर्माता के लिए एक स्ट्रिंग पार कर लेते हैं, स्ट्रिंग एक प्रारूप parse विधि (IETF-compliant RFC 1123 timestamps) (: MDC स्रोत) द्वारा मान्यता प्राप्त होना चाहिए। बाकी सब कुछ कार्यान्वयन विशिष्ट व्यवहार में परिणाम देता है और ब्राउज़र में भिन्न होगा।

मैं सुझाव है कि आप सभी को एक तार का उपयोग नहीं करते हैं और या तो तीन नंबर का प्रतिनिधित्व वर्ष, माह और दिन का उपयोग करें (मन में उस महीने संख्या (= जनवरी) 0 पर शुरू), एक नंबर या उपयोग करते हैं, मिलीसेकेंड की संख्या 1 जनवरी 1 9 70 00:00:00 यूटीसी के बाद से।

अद्यतन: अपने उदाहरण देखकर,

var a = new Date('0123'); 
console.log(a); 

आउटपुट

Fri Jan 01:00:00 GMT+0100 (CET) 

तो फ़ायरफ़ॉक्स जाहिरा तौर पर यह स्वीकार करता '0123' एक वर्ष संख्या के रूप में।

अद्यतन 2: मुझे लगता है कि MDC's description of Date.parse अपने प्रश्न का उत्तर शामिल हैं:

जावास्क्रिप्ट 1.8.5 में शुरू, ISO 8601 स्वरूपित तारीख तार का एक सबसेट भी पार्स किया जा सकता।

आईएसओ 8601 पेज निर्दिष्ट (अनुभाग 'प्रारूप'):

वर्ष:
YYYY (जैसे 1997)
वर्ष और महीने:
YYYY-MM (जैसे 1997 07)
पूर्ण तिथि:
YYYY-MM-DD (जैसे 1997-07-16)

तो आईएसओ 8601 पर भरोसा करते समय, केवल चार संख्या वाले स्ट्रिंग को वर्ष संख्या के रूप में पहचाना जाएगा।

+0

मैं समझता हूँ कि यह शिकायत नहीं है, मैं सिर्फ क्यों फ़ायरफ़ॉक्स इस व्यवहार प्रदर्शित होता सोच रहा था। –

+1

@ ब्रायन: यह सिर्फ इसलिए है, इसका व्यवहार निर्दिष्ट नहीं है; [ECMAScript कल्पना] के अनुसार (http://ecma262-5.com/ELS5_Section_15.htm#Section_15.9.4.2), "[i] च स्ट्रिंग है कि के अनुरूप नहीं है समारोह को फ़ॉर्मेट किसी भी कार्यान्वयन करने के लिए वापस गिर सकता है विशिष्ट heuristics या कार्यान्वयन-विशिष्ट तिथि प्रारूप। "' Date' निर्माता * * वापसी 'NaN' यदि स्ट्रिंग एक तारीख के रूप में मान्यता प्राप्त नहीं है चाहिए। यह सिर्फ कुछ ब्राउज़र दूसरों की तुलना में अधिक क्षमा कर रहे हैं। –

+0

मैं मैं वास्तव में पूछ रहा हूँ क्यों Firefox के कार्यान्वयन-विशिष्ट गिरावट वापस '123', लेकिन '0123' के लिए एक तिथि के लिए NaN वापस आ जाएगी लगता है। क्या मुझे अपने प्रश्न को बेहतर तरीके से सत्यापित करने के लिए अपनी पोस्ट संपादित करनी चाहिए? –

0

मैं फ़ायरफ़ॉक्स में इस के साथ के रूप में ही इस मुद्दे का सामना करना पड़ा है, कुछ कारणों से मैं किसी भी 4 अंक सांख्यिक वर्ण व्याख्या नहीं कर सकते एफएफ में कोई मान्य दिनांक अन्य ब्राउज़रों में, है यह NaN है:

थोड़ा बुरा काम -around एफएफ के लिए लेकिन, यह मेरे लिए काम किया:

function isDate(sDate) { 
    if(sDate.match(/^\d{4}$/)) 
     return false; 
    var temp = new Date(sDate); 
    if (temp.toString() == "NaN" || temp.toString() == "Invalid Date") { 
     alert("Not a Date"); 
    } else { 
     alert("Is a Date!"); 
     return true; 
    } 
} 
+0

कामकाज के लिए धन्यवाद! मुझे लगता है कि मैं इस तरह अपने कोड में कुछ भी इस्तेमाल करूंगा। –

1

जावास्क्रिप्ट में तारीख सत्यापन पर विश्वास न करें। स्थानीय दिनांक समय प्रारूप जावास्क्रिप्ट दिनांक वस्तु के साथ कुछ समस्या पैदा कर सकता है।

उपयोग निम्नलिखित दृष्टिकोण

  • शो गैर संपादन योग्य पाठ बॉक्स
  • पाठ बॉक्स शो कैलेंडर
  • खाली सत्यापन कर का ध्यान केंद्रित पर, यह फील्ड अनिवार्य होने के लिए
  • तारीख प्रदर्शन करने के लिए कोई जरूरत नहीं है सत्यापन जैसे कि टेक्स्ट बॉक्स का मूल्य खाली नहीं है, यह निश्चित रूप से दिनांक होगा। हम उपयोगकर्ता कुछ और प्रवेश करने की अनुमति नहीं कर रहे हैं और कैलेंडर से चयनित मूल्य हमेशा वाला तिथि :)
1

यह सभी ब्राउज़रों में काम करता है हो जाता है -

नई तारीख ('2001/01/31 12:00:00 हूँ ')

+0

आपने मुझे जवाब दिया कि जब मैंने इसे नई तिथि() ऑब्जेक्ट सृजन पर लागू किया तो मेरी ऑब्जेक्ट विफल क्यों हुई। जब मैं डैश '-' पास करता हूं तो फ़ायरफ़ॉक्स बस विफल रहता है। क्रोम नहीं है नौकरी करने के लिए '/' को बदल दिया – neoswf

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