2013-07-24 8 views
6

Jak wyświetlić liczbę dni w miesiącu dla określonego roku w JavaScript?Jak wyświetlić liczbę dni w miesiącu przez określony rok?

Jak wiemy 30 dni ma wrzesień, kwiecień, czerwiec i listopad. Cała reszta ma 31, Z wyjątkiem lutego, Która ma 28 dni wyczyść, I 29 w każdym roku przestępnym.

Potrzebuję wziąć liczbę roku przestępnego. Czy znasz jakiś natywny sposób na poznanie ... lub może bibliotekę ... czy możesz ją zaproponować?

Odpowiedz

9

spróbować tej

function daysInMonth(m, y) 

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

Zastosowanie:

>> daysInMonth(2,2000) //29

+1

To całkiem fajne, ale czy gwarantowane jest, że zawsze działa, we wszystkich implementacjach? Zastanawiam się, czy stricto senso 32 jest nieprawidłową wartością dla pola miesiąca. – fvu

3

Będzie to działać zbyt zakładając Jan=1, Feb=2 ... Dec=12

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

FIDDLE

+0

nie, nie jest. 'new Date (2000, 1, 0) .getDate() // 31' i feb 2000 ma 29 dni –

+1

@RoyiNamir Podajesz' 1' zamiast '2' wierzę, że luty to 2 miesiąc roku http: //jsfiddle.net/eFUAm/2/ –

+0

ok. bo wiem, że ten miesiąc wynosi zero, więc feb jest 1. powinieneś o tym wspomnieć w swojej odpowiedzi. –

0

Istnieje prawdopodobnie rodzimych sposobów, aby dowiedzieć się, ale myślę, że to miło wiedzieć, że algorytm rok przestępny w rzeczywistości nie jest tak trudne do wdrożenia przez siebie:

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

Możesz, oczywiście, tylko napisać funkcja na podstawie tego, co już wiemy, w połączeniu z logiką lata przestępne:

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

lata podzielne przez 4, ale nie jest podzielna przez 100, z wyjątkiem, gdy są podzielne przez 400 lata przestępne.

Powiązane problemy