2010-08-25 13 views

Respuesta

12

Basta con crear una fecha en ese mes, analizar, y usar getMonth() como esto

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

¡Es una buena idea! – Pointy

+0

Me gusta esto. Para completar, ¿qué pasará si paso un mes inválido (como "ugun")? –

+3

Vale la pena mencionar que * Date.parse() * devuelve un número que representa la fecha, no un objeto de fecha real. Además * getMonth() * devolverá * 7 *, no * 8 * porque los meses están basados ​​en cero. –

3

Puede crear una matriz (pares nombre/vale) en su código ya que solo son 12 meses y escribir una función para hacerlo.

var months = {August: 8}; 
+0

que no es muy diferente de una sentencia switch grande, pero sin duda una idea de copia de seguridad – leora

+0

No es una sentencia switch grande, puntiaguda tiene la misma idea. son solo dos líneas de código para ti. – Achilles

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

edición pero hacerlo de la manera @Chad sugiere :-)

Si desea que sea insensible a la caja alfabética, debe crear el objeto ("monthtbl") en minúsculas y luego usar

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

+1 ¡Ese es el enfoque! – Achilles

+1

Esto es sólido. Fuera de interés: ¿cómo haría que este caso no sea sensible? En caso de que necesite analizar una entrada del usuario? –

+1

FWIW, esto obviamente será más rápido si lo haces muchas veces. –

2

Otra opción sólo para tirar por ahí, se puede utilizar una matriz y $.inArry(), así:

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

Aunque a juzgar por sus preguntas anteriores, tirando de la fecha directamente desde el objeto jQuery UI selector de fecha mayo ser mucho más fácil.

+1

¡Yikes! No hay necesidad de jQuery aquí. – palswim

+0

Podría reemplazarse con Array.indexOf, pero no es compatible con el navegador cruzado. –

+1

@palswim parece que "ooo" ya está usando jQuery porque muchas de sus preguntas recientes están así etiquetadas. – Pointy

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

aquí valor contiene el valor del nombre del mes

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

Por favor explique su respuesta brevemente para que sea más útil para OP y otros lectores. –

Cuestiones relacionadas