2010-08-25 26 views

Trả lời

12

Chỉ cần tạo ra một ngày trong tháng đó, phân tích nó, và sử dụng getMonth() như

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

Đó là một ý tưởng hay! – Pointy

+0

Tôi thích điều này. Để hoàn thành, điều gì sẽ xảy ra nếu tôi vượt qua một tháng không hợp lệ (như "Äugust")? –

+3

Đáng nói rằng * Date.parse() * trả về một số đại diện cho ngày tháng, không phải là một đối tượng ngày tháng thực tế. Ngoài ra * getMonth() * sẽ trả về * 7 *, không * 8 * vì các tháng không dựa trên. –

3

Bạn có thể tạo một mảng (cặp tên/cặp) trong mã của bạn vì nó chỉ có 12 tháng và viết một hàm để thực hiện.

var months = {August: 8}; 
+0

rằng không có nhiều khác biệt so với một câu lệnh switch lớn nhưng chắc chắn là một ý tưởng sao lưu – leora

+0

Không phải là một câu lệnh switch lớn, chóp có ý tưởng tương tự. nó chỉ có hai dòng mã cho bạn. – Achilles

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

chỉnh sửa này nhưng làm theo cách các @Chad gợi ý :-)

Nếu bạn muốn làm cho nó không nhạy cảm với trường hợp chữ cái, bạn sẽ tạo đối tượng ("monthtbl") tất cả chữ thường và sau đó sử dụng

var monthNumber = monthtbl[monthName.toLowerCase()]; 
+0

+1 Đó là cách tiếp cận! – Achilles

+1

Đây là chất rắn. Không quan tâm: làm thế nào tôi sẽ làm cho trường hợp này không nhạy cảm? Trong trường hợp tôi cần phải phân tích cú pháp đầu vào của người dùng? –

+1

FWIW, điều này rõ ràng sẽ nhanh hơn nếu bạn làm điều này nhiều lần. –

2

Một lựa chọn khác chỉ để ném ra khỏi đó, bạn có thể sử dụng một mảng và $.inArry(), như thế này:

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

Mặc dù đánh giá bởi những câu hỏi trước đó của bạn, kéo ngày trực tiếp từ đối tượng jquery UI datepicker thể dễ dàng hơn nhiều.

+1

Yikes! Không cần jQuery ở đây. – palswim

+0

Nó có thể được thay thế bằng Array.indexOf, nhưng đó không phải là trình duyệt chéo thân thiện. –

+1

@palswim có vẻ như là "ooo" đã sử dụng jQuery vì nhiều câu hỏi gần đây của anh được gắn thẻ. – Pointy

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

đây giá trị giữ giá trị tên tháng

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

Vui lòng giải thích ngắn gọn câu trả lời của bạn để làm cho nó hữu ích hơn cho OP và các độc giả khác. –

Các vấn đề liên quan