2010-08-25 6 views
9

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

उत्तर

12

बस, उस महीने में एक तारीख बनाने उसे पार्स और इस तरह

function convertMonthNameToNumber(monthName) { 
    var myDate = new Date(monthName + " 1, 2000"); 
    var monthDigit = myDate.getMonth(); 
    return isNaN(monthDigit) ? 0 : (monthDigit + 1); 
} 

alert(convertMonthNameToNumber("August"));  //returns 8 
alert(convertMonthNameToNumber("Augustsss")); //returns 0 (or whatever you change the default too) 
alert(convertMonthNameToNumber("Aug"));  //returns 8 - Bonus! 
alert(convertMonthNameToNumber("AuGust"));  //returns 8 - Casing is irrelevant! 
+0

यह एक अच्छा विचार है! – Pointy

+0

मुझे यह पसंद है। पूर्णता के लिए, यदि मैं एक अवैध महीने (जैसे "Äugust") पास करता हूं तो क्या होगा? –

+3

उल्लेखनीय है कि * Date.parse() * तारीख का प्रतिनिधित्व करने वाली संख्या को वास्तविक दिनांक वस्तु नहीं देता है। इसके अलावा * getMonth() * * 7 *, * * * * वापस नहीं आएगा क्योंकि महीनों शून्य-आधारित हैं। –

3

आप अपने कोड में एक सरणी (नाम/vale जोड़े) बना सकते हैं क्योंकि यह केवल 12 महीने है और इसे करने के लिए एक फ़ंक्शन लिखें।

var months = {August: 8}; 
+0

कि एक बड़ा स्विच बयान की तुलना में बहुत अलग है, लेकिन निश्चित रूप से एक बैकअप विचार – leora

+0

नहीं एक बड़ा स्विच बयान नहीं, नुकीले एक ही विचार है रखती है। यह आपके लिए कोड की केवल दो पंक्तियां है। – Achilles

4
var monthtbl = { 'January': 1, 'February': 2, /* ... */, 'August', 8, /* ... */, 'December': 12 }; 
// ... 
var monthNumber = monthtbl[monthName]; 

संपादितgetMonth() का उपयोग, लेकिन यह तरीके से करना @Chad पता चलता है :-)

यदि आप इसे वर्णमाला के मामले में असंवेदनशील बनाना चाहते हैं, तो आप ऑब्जेक्ट ("monthtbl") को सभी लोअर-केस बनायेंगे और फिर

का उपयोग करें
var monthNumber = monthtbl[monthName.toLowerCase()]; 
+0

+1 यह दृष्टिकोण है! – Achilles

+1

यह ठोस है। ब्याज से: मैं इस मामले को असंवेदनशील कैसे बनाऊंगा? यदि मुझे उपयोगकर्ता इनपुट को पार्स करने की ज़रूरत है? –

+1

एफडब्ल्यूआईडब्ल्यू, यदि आप इसे कई बार कर रहे हैं तो यह स्पष्ट रूप से तेज़ होगा। –

2

एक अन्य विकल्प सिर्फ वहाँ बाहर निकालने के लिए, आप एक सरणी और $.inArry(), इस तरह इस्तेमाल कर सकते हैं:

var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 
function getMonth(name) { 
    return $.inArray(name, months) +1; 
} 

, अपने पिछले सवाल से पहचानने jQuery के यूआई datepicker वस्तु से सीधे तारीख खींच हालांकि हो सकता है बहुत आसान हो।

+1

यिक्स! यहां jQuery के लिए कोई ज़रूरत नहीं है। – palswim

+0

इसे Array.indexOf के साथ प्रतिस्थापित किया जा सकता है, लेकिन यह क्रॉस ब्राउज़र अनुकूल नहीं है। –

+1

@palswim ऐसा लगता है कि "ओयू" पहले ही jQuery का उपयोग कर रहा है क्योंकि उसके हाल के कई प्रश्न इस प्रकार टैग किए गए हैं। – Pointy

0
function monthToNumber(month) { 
    return new Date(Date.parse("1 "+month)).getMonth()+1; 
} 
0

यहाँ मूल्य महीने नाम मूल्य

var month1 = value; 
month1 = month1.toLowerCase(); 
var months = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 
month1 = months.indexOf(month1); 
+1

ओपी और अन्य पाठकों के लिए इसे और अधिक उपयोगी बनाने के लिए कृपया संक्षेप में अपने उत्तर की व्याख्या करें। –

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