2010-08-25 5 views

Antwort

12

Erstellen Sie einfach ein Datum in diesem Monat, analysieren sie und verwenden getMonth() wie diese

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

Das ist eine gute Idee! – Pointy

+0

Ich mag das. Was passiert, wenn ich einen ungültigen Monat passiere (wie "Äugust")? –

+3

Erwähnenswert ist, dass * Date.parse() * eine Zahl zurückgibt, die das Datum darstellt, kein tatsächliches Datumsobjekt. Auch * getMonth() * wird * 7 * zurückgeben, nicht * 8 *, da Monate auf Null basieren. –

3

Sie können ein Array (Name/Vale-Paare) in Ihrem Code erstellen, da es nur 12 Monate ist und eine Funktion schreiben, um es zu tun.

var months = {August: 8}; 
+0

, die nicht viel anders als eine große Aussage Schalter aber auf jeden Fall ein Backup Idee – leora

+0

Keine große switch-Anweisung, Zipfel die gleiche Idee hat. Es sind nur zwei Codezeilen für Sie. – Achilles

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

bearbeiten aber tun es die Art und Weise @Chad schlägt :-)

Wenn Sie es für alphabetische Groß-/Kleinschreibung unempfindlich machen möchten, erstellen Sie das Objekt ("monthtbl") in Kleinbuchstaben und verwenden Sie dann

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

+1 Das ist der Ansatz! – Achilles

+1

Dies ist solide. Aus Interesse: Wie würde ich diesen Fall unsensibel machen? Für den Fall, dass ich eine Benutzereingabe analysieren muss? –

+1

FWIW, wird dies natürlich schneller sein, wenn Sie das viele Male tun. –

2

Eine weitere Option nur da draußen zu werfen, ein Array verwenden könnte und $.inArry(), wie folgt aus:

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

Obwohl durch Ihre vorherigen Fragen zu urteilen, das Datum direkt aus dem jQuery UI Datepicker Objekt ziehen kann viel einfacher sein.

+1

Huch! Keine Notwendigkeit für jQuery hier. – palswim

+0

Es könnte mit Array.indexOf ersetzt werden, aber das ist nicht Cross-Browser-freundlich. –

+1

@palswim es scheint, dass "ooo" bereits jQuery verwendet, weil viele seiner letzten Fragen so getaggt sind. – Pointy

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

hier Wert hält den Monatsnamen Wert

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

Bitte erläutern Sie Ihre Antwort kurz, um sie für OP- und andere Leser nützlicher zu machen. –

Verwandte Themen