2009-07-26 17 views

risposta

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

in JavaScript mesi, quindi mentre questo sembra giusto è incoerente con altre funzioni javascript – Greg

+3

Right. Quindi usa la mia funzione se stai analizzando l'input dell'utente e la funzione di soulscratch se stai usando l'input programmatico. –

+6

Tranne che non funziona. new Date (2012, 5, 0) .getDate() restituisce 31. Ci sono solo 30 giorni a giugno. Idem per un sacco di altri mesi. http://jsfiddle.net/LVLd3/ rispetto al calendario corretto all'indirizzo http://www.timeanddate.com/calendar/ – SamGoody

18

Di seguito assume un valore datetime valido e restituisce il numero di giorni del mese associato ... elimina l'ambiguità di entrambe le altre risposte ...

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

Genera errore quando lo chiamo: daysInMonth (new Date()). – CyberFox

+0

Sì, basta cambiare '++ anyDateInMonth.getMonth()' a 'anyDateInMonth.getMonth() + 1' – rescuecreative

+0

@rescuecreative, funzionerebbe in questo modo:' ++ (anyDateInMonth.getMonth()) '?? –

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

Da quanto ho capito, 'new Date (year, month, 0)' produrrà l'ultimo mese dell'ultimo giorno, quindi aggiungendo '+ 1' ai risultati dei parametri nei giorni del mese corrente. Non sto correggendo nulla qui. Sto cercando di essere sicuro di capire, e credo che la risposta di kennebec sia la risposta corretta. – Brent

+1

@Brent hai capito bene. Anche questa funzione rispetta i mesi di Javscript essendo basata su 0 che è bella e comoda – Aides

+4

Questa è la risposta corretta, non quella sopra. – Shawn

5

Un'altra possibile opzione sarebbe quella di utilizzare Datejs

Poi si può fare

Date.getDaysInMonth(2009, 9)  

Anche se l'aggiunta di una libreria solo per questa funzione è eccessivo, è sempre bello conoscere tutte le opzioni che avete un basati 0 a vostra disposizione :)

+8

ecco la funzione che usano in Datejs: return [31, ($ D.isLeapYear (year)? 29: 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] [mese] ; – CyberFox

Problemi correlati