2010-07-12 11 views
6

मैंने देखा Date.Parse केवल 2 अंकों की तारीखों को संभाल नहीं सकता है।जावास्क्रिप्ट दिनांक कैसे बनाएं .parse कम सालों को समझते हैं?

मैं इस

mm/dd/yy = 7/11/20 

दिनांक पार्स यह = 7/11/1920 है सोचेंगे है कहो। क्या आप इसे दो हजार साल का उपयोग करने के लिए सेट कर सकते हैं? जैसा कि यह थोडा अजीब है, मुझे jquery u.i दिनांक पिकर मिला है और यदि आप 7/11/20 में टाइप करते हैं तो यह 2020 पता लगाएगा।

तो यह अच्छा होगा अगर Date.parse रख सकता है तो मैं उन्हें नहीं जानता कि क्या हो रहा है या दोनों जानते हैं कि क्या हो रहा है, उसके बाद कोई जानता है और जिसे पता नहीं है।

+1

सबसे अच्छा समाधान पूर्ण तिथि प्रदान करने के लिए, हमेशा होगा। – BrunoLM

+0

@ बर्नोएलएम मैं इस बात से सहमत हूं कि टेक्स्टबॉक्स पर क्लिक होने पर मेरे पास डेटपिकर पॉपअप है, हालांकि उपयोगकर्ता किसी भी कारण से मैन्युअल रूप से टाइप कर सकता है जो मैंने "7/11/20" किया था। यह मेरे किसी भी सी # कोड को प्रभावित नहीं करता है क्योंकि यह पता चलता है कि यह 2020 है लेकिन यह मेरी कुछ ड्रॉपडाउन सूचियों को खराब करता है जो तिथि के आधार पर फ़िल्टर किए जाते हैं। इसलिए यदि मैं इसे ठीक कर सकता हूं तो मुझे भी किसी भी कारण से jquery मान्य "दिनांक" नहीं लगता है कि यह एक सत्यापन त्रुटि है और वैध प्रारूप में है। – chobo2

उत्तर

5

ऐसा नहीं है कि मुझे पता है। लेकिन आप हमेशा साल समायोजित कर सकते हैं:

YourDate="7/11/20"; 
DateObj=new Date(YourDate.replace(/(\d\d)$/,"20$1")); 

alert(DateObj); 

This code in action.

संपादित करें: निम्नलिखित कोड दोनों पूर्ण और ही वर्षों संभाल लेंगे:

YourDate="7/11/2020"; 
DateObj=new Date(YourDate.replace(/\/(\d\d)$/,"/20$1")); 

alert(DateObj); 

This code in action.

+1

यह एक अच्छी चाल है! – BrunoLM

+0

यह क्या कर रहा है? मैं $ 1 के साथ थोड़ी उलझन में हूं, उपयोगकर्ता हमेशा एक पूर्ण तिथि दे सकता है। फिर यह विफल रहता है। तो इसे कैसे संशोधित किया जा सकता है? – chobo2

+0

@ ब्रूनोएलएम - धन्यवाद।:) –

0

तो अपने प्रश्न यह है कि क्या आप Date.parse के तरीके को बदल सकते हैं ताकि कम-संख्या वाले दो-अंकों वाले डी वर्ष 2000 के बाद एट्स की तारीखों के रूप में व्याख्या की जाती है?

हां, यह किया जा सकता है, बस अपने स्वयं के पार्स फ़ंक्शन के साथ छाया दिनांक .parse।

// don't do this! 
Date.parse = function (str) { /* your parse routine here */ } 
बेशक

, यह आम तौर पर एक बहुत बुरा विचार गुण शैडो के लिए मेजबान वस्तुओं की ('तरीकों' उर्फ ​​समारोह गुण सहित) है, क्योंकि यह अन्य लिपियों कि उन गुणों को एक निश्चित तरीके काम करने की उम्मीद में गलत व्यवहार का कारण होगा ।

दो अंकों की तिथियों का उपयोग करना भी एक बुरा विचार है, लेकिन यह आपके नियंत्रण से बाहर हो सकता है। यदि यह आपके नियंत्रण से बाहर नहीं है, तो मैं केवल 2 अंकों की तिथियों को भूलने और इसके बजाय पूर्ण वर्ष मूल्य का उपयोग करने की सलाह दूंगा।

+1

बस लागू करने के लिए: यह बहुत ही खतरनाक है !! – BrunoLM

+0

हां मुझे नहीं लगता कि मैं वह लोल करूंगा। – chobo2

-1

इस बारे में कैसे?

var date = '7/11/20'; 
var idx = date.lastIndexOf('/') + 1; 
date = date.substr(0,idx) + '20' + date.substr(idx); 
var result = Date.parse(date);​ 
alert(result); 

या यह संस्करण जो पहले YYYY प्रारूप के लिए परीक्षण करेगा।

var date = '7/11/2020'; 
var idx = date.lastIndexOf('/') + 1; 
if(date.substr(idx).length < 4) { 
    date = date.substr(0,idx) + '20' + date.substr(idx); 
} 
var result = Date.parse(date); 
alert(new Date(result))​;​ 
+0

बहुत अच्छी तरह से काम नहीं करता है आप जानते हैं ... '7/11/2000 = 7/11/202000' – BrunoLM

+0

@ ब्रूनोएलएम - मुझे लगता है कि धारणा यह है कि वाई वाई प्रारूप हमेशा उपयोग किया जाएगा। एक YYYY प्रारूप के लिए एक परीक्षण जोड़ने के लिए काफी आसान है। – RightSaidFred

+0

अच्छा उपयोगकर्ता वाई वाई या वाई वाई वाई में टाइप कर सकता है। मुझे यकीन नहीं है कि वाई वाई वाई नहीं जानता कि यह काम करता है या नहीं। मुझे पता है कि पहले 2 सी # पता लगा सकते हैं और पार्स कर सकते हैं और डेट डेटर भी कर सकते हैं। – chobo2

0

यहाँ मेरी समाधान है:

function parseDate(stringValue) 
{ 
    var date = new Date(stringValue); 
    if (!isNaN(date.getTime())) 
    { 
     // if they typed the year in full then the parsed date will have the correct year, 
     // if they only typed 2 digits, add 100 years to it so that it gets translated to this century 
     if (stringValue.indexOf(date.getFullYear()) == -1) 
     { 
      date.setFullYear(date.getFullYear() + 100); 
     } 

     return date; 
    } 
    else 
    { 
     return null; 
    } 
} 
संबंधित मुद्दे