2009-07-26 11 views

Respuesta

423
// Month is 1-indexed (January is 1, February is 2, etc). 
function daysInMonth (month, year) { 
    return new Date(year, month, 0).getDate(); 
} 

// July 
daysInMonth(7,2009); // 31 
// February 
daysInMonth(2,2009); // 28 
daysInMonth(2,2008); // 29 
+38

en meses Javascript, por lo que mientras esto parece correcto es inconsistente con otras funciones de Javascript – Greg

+3

Derecha. Así que utiliza mi función si estás analizando la entrada del usuario y la función de alscratch si estás usando la entrada programática. –

+6

Excepto que no funciona. nueva Fecha (2012, 5, 0) .getDate() devuelve 31. Solo hay 30 días en junio. Lo mismo para muchos otros meses. http://jsfiddle.net/LVLd3/ frente al calendario correcto en http://www.timeanddate.com/calendar/ – SamGoody

18

La siguiente toma cualquier valor de fecha y hora válida y devuelve el número de días del mes asociado ... que elimina la ambigüedad de las dos otras respuestas ...

// pass in any date as parameter anyDateInMonth 
function daysInMonth(anyDateInMonth) { 
    return new Date(anyDateInMonth.getYear(), 
        anyDateInMonth.getMonth()+1, 
        0).getDate();} 
+1

Lanza un error cuando lo llamo: daysInMonth (new Date()). – CyberFox

+0

Sí, simplemente cambie '++ anyDateInMonth.getMonth()' a 'anyDateInMonth.getMonth() + 1' – rescuecreative

+0

@rescuecreative, ¿funcionaría así:' ++ (anyDateInMonth.getMonth()) '?? –

77
Date.prototype.monthDays= function(){ 
    var d= new Date(this.getFullYear(), this.getMonth()+1, 0); 
    return d.getDate(); 
} 
+5

Por lo que entiendo, 'new Date (year, month, 0)' producirá el último día del último mes, por lo que agregar '+ 1' a los parámetros da como resultado los días del mes actual. No estoy corrigiendo nada aquí. Estoy tratando de asegurarme de que entiendo, y creo que la respuesta de Kennebec es la respuesta correcta. – Brent

+1

@Brent lo entendiste correctamente. También esta función respeta los meses de Javscript que están basados ​​en 0, lo que es agradable y conveniente – Aides

+4

Esta es la respuesta correcta, no la anterior. – Shawn

5

Otra posible opción sería utilizar Datejs

a continuación, puede hacer

Date.getDaysInMonth(2009, 9)  

Aunque la adición de una biblioteca sólo para esta función es un exceso, siempre es bueno saber todas las opciones que haya una base 0-a su disposición :)

+8

aquí está la función que usan en Datejs: return [31, ($ D.isLeapYear (year)? 29: 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] [month] ; – CyberFox

Cuestiones relacionadas