2013-07-24 14 views
6

Come elencare quanti giorni per un mese per un anno specifico in JavaScript?Come elencare quanti giorni per un mese per un anno specifico?

Come sappiamo 30 giorni hanno settembre, aprile, giugno e novembre. Tutti gli altri hanno 31, eccetto febbraio, che ha 28 giorni liberi, E 29 in ogni anno bisestile.

Avrei bisogno di prendere in considerazione l'anno bisestile. Conosci qualche modo nativo di affezionarsi .. o forse una biblioteca ... potresti suggerirne uno?

risposta

9

provare questo

function daysInMonth(m, y) 

{ 
    m=m-1; //month is zero based... 
    return 32 - new Date(y, m, 32).getDate(); 
} 

utilizzo:

>> daysInMonth(2,2000) //29

+1

Questo è abbastanza elegante, ma è garantito che funzioni sempre, in tutte le implementazioni? Mi chiedo semplicemente come stricto senso 32 sia un valore non valido per il campo del mese. – fvu

3

Ciò funzionerà anche assumendo Jan=1, Feb=2 ... Dec=12

function daysInMonth(month,year) 
{ 
    return new Date(year, month, 0).getDate(); 
} 

FIDDLE

+0

no non lo è. 'new Date (2000, 1, 0) .getDate() // 31' e feb 2000 ha 29 giorni –

+1

@RoyiNamir Stai mettendo' 1' invece di '2' credo che febbraio sia il 2 ° mese di un anno http: //jsfiddle.net/eFUAm/2/ –

+0

ok. perchè so che il mese è zero, quindi feb è 1. dovresti menzionarlo nella tua risposta. –

0

ci sono modi probabilmente nativi per scoprirlo, ma penso che sia bello sapere, che l'algoritmo anno bisestile in realtà non è così difficile da attuare da soli:

function isLeapYear(year) { 
    if (year % 400 === 0) { 
     return true; 
    } else if (year % 100 === 0) { 
     return false; 
    } else if (year % 4 === 0) { 
     return true; 
    } 
    return false; 
} 
3

Si potrebbe, ovviamente, basta scrivere un la funzione in base a ciò che già sapete, in combinazione con la logica per gli anni bisestili:

// m is the month (January = 0, February = 1, ...) 
// y is the year 
function daysInMonth(m, y) { 
    return m === 1 && (!(y % 4) && ((y % 100) || !(y % 400))) ? 29 
     : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m]; 
} 

anni divisibili per 4, ma non è divisibile per 100, tranne se divisibili per 400 sono anni bisestili.

Problemi correlati