2009-07-26 8 views

答えて

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

Javascriptの数ヶ月で0ベースの、これは正しいと思われる一方で、それは矛盾しているように、他のjavascript関数と一緒に – Greg

+3

したがって、プログラム入力を使用している場合は、ユーザー入力とソウルスクラッチの関数を解析する場合は私の関数を使用してください。 –

+6

それ以外は動作しません。新しい日付(2012、5、0).getDate()は31を返します。6月には30日しかありません。他の数ヶ月の間、同上。 http://jsfiddle.net/LVLd3/ http://www.timeanddate.com/calendar/ – SamGoody

18

次は

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

私はそれを:daysInMonth(new Date())と呼ぶときにエラーを投げます。 – CyberFox

+0

'++ anyDateInMonth.getMonth()'を 'anyDateInMonth.getMonth()+ 1'に変更してください。 – rescuecreative

+0

@rescuecreative、これは次のようになります:' ++(anyDateInMonth.getMonth()) '?? –

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

私が理解しているところでは、 'new Date(year、month、0)'は最後の月の最終日を生成するので、 '+ 1'をパラメータに追加すると現在の月の日になります。私はここで何も修正していない。私は理解していることを確認しようとしています。ケンネベックの答えが正解であると私は信じています。 – Brent

+1

@ブレントあなたはそれを正しく理解しています。また、この関数は、便利で便利な0ベースのJavscript月を尊重します – Aides

+4

これは正解であり、上記の答えではありません。 – Shawn

5

別の可能な...それは両方の他の答えのあいまいさを排除し...任意の有効なdatetime値をとり、関連する月の日数を返します。あなたは

01を行うことができますオプションは、次に Datejs

を使用することです

Date.getDaysInMonth(2009, 9)  

ただ、この機能のためのライブラリを追加することはやり過ぎですが、あなたがあなたに利用可能なすべてのオプションを知っていることは常に良いことです:)

+8

Datejsで使用する関数は次のとおりです。return [31、($ D.isLeapYear(year)?29:28)、31、30、31、30、31、31、30、31、30、31] ; – CyberFox