мне нужно преобразовать имя месяца в целое число того месяца (и хочу избежать большого оператора switch). есть идеи?
Просто создайте дату в этом месяце, проанализируйте ее и используйте getMonth()
вот так
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!
Другой вариант, который можно просто выбросить, вы можете использовать массив и $ .inArry ()
, например:
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
function getMonth(name) {
return $.inArray(name, months) +1;
}
Хотя, судя по вашим предыдущим вопросам, получение даты непосредственно из объекта datepicker пользовательского интерфейса jquery может быть намного проще.
var monthtbl = { 'January': 1, 'February': 2, /* ... */, 'August', 8, /* ... */, 'December': 12 };
// ...
var monthNumber = monthtbl[monthName];
edit , но делайте это так, как предлагает @Chad: -)
Если вы хотите сделать его нечувствительным к буквенному регистру, вы должны создать объект ("monthtbl") все в нижнем регистре, а затем используйте
var monthNumber = monthtbl[monthName.toLowerCase()];
Вы можете создать массив (пары имя/значение) в своем коде, так как прошло всего 12 месяцев, и написать для этого функцию.
var months = {August: 8};
function monthToNumber(month) {
return new Date(Date.parse("1 "+month)).getMonth()+1;
}