2013-07-24 9 views
6

Wie kann ich die Anzahl der Tage für einen bestimmten Monat in JavaScript auflisten?Wie liste ich auf, wie viele Tage für einen Monat für ein bestimmtes Jahr?

Wie wir wissen 30 Tage haben September, April, Juni und November. Alle anderen haben 31, Außer Februar, Welche hat 28 Tage klar, Und 29 in jedem Schaltjahr.

Ich müsste die Schaltjahre zählen. Kennen Sie einen nativen Weg, um .. .. oder vielleicht eine Bibliothek .. können Sie einen vorschlagen?

Antwort

9

versuchen, diese

function daysInMonth(m, y) 

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

Nutzung:

>> daysInMonth(2,2000) //29

+1

Das ist ziemlich geschickt, aber ist es garantiert immer in allen Implementierungen zu arbeiten? Ich frage mich nur, wie stricto senso 32 ist ein ungültiger Wert für das Feld Monat. – fvu

3

Dies wird auch funktionieren vorausgesetzt Jan=1, Feb=2 ... Dec=12

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

FIDDLE

+0

nein ist es nicht. 'new Date (2000, 1, 0) .getDate() // 31' und Februar 2000 hat 29 Tage –

+1

@RoyiNamir Sie setzen' 1' statt '2' Ich glaube, Februar ist der 2. Monat eines Jahres http: //jsfiddle.net/eFUAm/2/ –

+0

ok. Weil ich weiß, dass der Monat Null basiert, also ist Feb 1. Sie sollten es in Ihrer Antwort erwähnen. –

0

Es gibt wahrscheinlich nativer Möglichkeiten, um herauszufinden, aber ich denke, es ist schön zu wissen, dass das Schaltjahr-Algorithmus eigentlich nicht so schwer ist, dass man sich zu implementieren:

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

Sie könnten natürlich, schreiben Sie einfach eine Funktion auf, was Sie bereits wissen, mit der Logik für Schaltjahre kombiniert:

// 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]; 
} 

Jahre durch 4 teilbar, aber nicht durch 100 teilbar, außer wenn teilbar durch 400 Schaltjahre sind.

Verwandte Themen