2010-05-31 8 views
10

मैं इस प्रारूप में एक तारीख है: dd.mm.yyyyएक गैर मानक दिनांक स्वरूप से एक नई तिथि() जावास्क्रिप्ट में कैसे बनाएं

जब मैं इसके साथ एक जावास्क्रिप्ट तारीख का दृष्टांत, यह मेरे एक देता है NaN

सी # में मैं एक दिनांक प्रारूप निर्दिष्ट कर सकता हूं, कहने के लिए: यहां आपके पास स्ट्रिंग है, यह इस प्रारूप में है, कृपया इसका डेटाटाइम बनाएं।

क्या यह जावास्क्रिप्ट में भी संभव है? यदि नहीं, तो क्या कोई आसान तरीका है?

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

उत्तर

23

आप दिनांक भागों निकालें और उन्हें Date निर्माता के साथ उपयोग करने के लिए एक समारोह बनाने की आवश्यकता होगी।

ध्यान दें कि यह कन्स्ट्रक्टर महीनों को शून्य आधारित संख्याओं (0=Jan, 1=Feb, ..., 11=Dec) के रूप में मानता है।

function parseDate(input) { 
    var parts = input.match(/(\d+)/g); 
    // note parts[1]-1 
    return new Date(parts[2], parts[1]-1, parts[0]); 
} 

parseDate('31.05.2010'); 
// Mon May 31 2010 00:00:00 

संपादित करें:: एक चर प्रारूप से निपटने आप कुछ इस तरह कर सकता है के लिए:

उदाहरण के लिए

function parseDate(input, format) { 
    format = format || 'yyyy-mm-dd'; // default format 
    var parts = input.match(/(\d+)/g), 
     i = 0, fmt = {}; 
    // extract date-part indexes from the format 
    format.replace(/(yyyy|dd|mm)/g, function(part) { fmt[part] = i++; }); 

    return new Date(parts[fmt['yyyy']], parts[fmt['mm']]-1, parts[fmt['dd']]); 
} 

parseDate('05.31.2010', 'mm.dd.yyyy'); 
parseDate('31.05.2010', 'dd.mm.yyyy'); 
parseDate('2010-05-31'); 

ऊपर समारोह एक प्रारूप पैरामीटर स्वीकार करता है, कि yyyymm और dd प्लेसहोल्डर, विभाजक शामिल होना चाहिए वास्तव में महत्वपूर्ण नहीं हैं, क्योंकि केवल अंकों को RegExp द्वारा पकड़ा जाता है।

तुम भी DateJS को एक नज़र, तारीख दर्दरहित पार्स करने में आता है कि एक छोटा सा पुस्तकालय दे सकता है ...

+1

मैं mm/dd/yyyy और dd/mm/yyyy को भी संसाधित करना चाहता हूं – Michel

+0

@ मिशेल मेरे संपादन को देखने के लिए। – CMS

+0

उत्कृष्ट! एक जादू की तरह काम करता है! इससे नफरत है कि मुझे कोई संकेत नहीं है कि यह कैसे काम करता है :) – Michel

7

आपकी इच्छानुसार तारीखों में हेरफेर करने के तरीके में कोई भी अंतर्निहित नहीं है।

jQuery-UI datepicker में कार्यक्षमता है जो आप चाहते हैं, मुझे यकीन है कि कई अन्य पुस्तकालयों में कुछ समान है।

$.datepicker.parseDate('dd.mm.yy', '31.12.2007'); 
+1

हाँ, यह कुछ है जो मैं चाहता हूं, लेकिन यदि संभव हो तो पूरे डेटपिकर lib के बिना। तो मैं उन 'अन्य पुस्तकालयों' में से एक चाहूंगा :-) – Michel

+1

@ मिशेल "डेटजेस" की जांच करें, जिसका उपयोग jQuery UI datepicker – Pointy

+0

@Pointy - perfect द्वारा किया जाता है, मैं बस वही चीज़ ढूंढ रहा था – Ryley

8

यह एक सरणी में स्ट्रिंग विभाजित है और भागों दिनांक वस्तु को सीधे पारित करने के लिए पर्याप्त आसान है:

var str = "01.01.2010"; 
var dmy = str.split("."); 

var d = new Date(dmy[2], dmy[1] - 1, dmy[0]); 
+3

दिनांक() का महीना पैरामीटर शून्य आधारित सूचकांक में महीना लेता है। जनवरी = 0, फरवरी = 1, मार्च = 2 ... आदि – Warty

+0

@ItzWarty: हाँ, मुझे बस यह भी याद आया, धन्यवाद :-) –

1
t="01.01.1970" 
parts = t.split("."); 
for(var i = 0; i < parts.length; i++) parts[i] = parseInt(parts[i], 10); 
new Date(parts[2], parts[1]-1, parts[0]); 

तिथि के रूप में (वर्ष, माह, तिथि)
की तारीख() के महीने पैरामीटर परिभाषित शून्य आधारित सूचकांक में महीने लग जाते हैं। जनवरी = 0, फरवरी = 1, मार्च = 2 ... आदि

स्ट्रिंग को एक int में पार्स करना आवश्यक नहीं है, लेकिन मैं कार्यों में तारों को पार करने से नापसंद करता हूं और उम्मीद करता हूं कि जावास्क्रिप्ट "इसे प्राप्त करेगा" ... कुछ लोगों को पसंद करते हैं जैसे क्रमबद्ध करें ===

+1

'parseInt' की आवश्यकता नहीं होनी चाहिए (जावास्क्रिप्ट का टाइपिंग गतिशील है और तार स्वचालित रूप से होना चाहिए एक संख्या में डाला गया) और लूप इस तरह के एक सरल ऑपरेशन के लिए थोड़ा ओटीटी है। –

+1

क्या @ एंडी कहता है कि 'दिनांक' कन्स्ट्रक्टर [स्पष्ट रूप से] (http://bclary.com/2004/11/07/#a-15.9.3.1) आंतरिक रूप से तर्कों को परिवर्तित करेगा ['ToNumber'] (http: //bclary.com/2004/11/07/#a-9.3)। इसके अलावा, रेडिक्स तर्क के बिना 'parseInt' का उपयोग करके, यहां विशेष रूप से हानिकारक है, क्योंकि आपके पास दिनांक 09.09.2010 ", और' parseInt ('09') == 0' हो सकता है, क्योंकि पिछले शून्य बल देगा ऑक्टल बेस के रूप में संख्या रूपांतरण, और यह आंतरिक 'ToNumber' ऑपरेशन के साथ नहीं होता है। – CMS

+0

अच्छा बिंदु, सीएमएस। – Warty

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