web-dev-qa-db-ja.com

Javascript:特定の年の月の日数を計算します

月、日、年の3つのドロップダウンがあるHTMLページがあり、月と年に応じて月のドロップダウンを適切に設定する方法があるかどうか疑問に思いました。

私はこれまでクライアント側でこれを行ったことがありませんが、jQueryDatePickerのような多くのコントロールが舞台裏でこれを行っているようです。

11
Abe

日付オブジェクトで遊ぶことができます:

var monthStart = new Date(year, month, 1);
var monthEnd = new Date(year, month + 1, 1);
var monthLength = (monthEnd - monthStart) / (1000 * 60 * 60 * 24)

Dateオブジェクトを使用した算術演算では、ミリ秒数が得られます。

これは12月でも機能します。 Dateコンストラクターは、ラップアラウンドすることによって範囲外の引数を処理します。

monthはゼロベースであることに注意してください(011の間にある必要があります)

18
SLaks

私の知る限り、そのための(きちんとした)組み込み関数はありません。私はこれを一度書いた:

// note that month is 0-based, like in the Date object. Adjust if necessary.
function getNumberOfDays(year, month) {
    var isLeap = ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0));
    return [31, (isLeap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}
27
Matti Virkkunen

別の投稿からコピー: javascriptを使用して指定された月の日数を取得しますか?

//Month is 1 based
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

@c_harmへのすべてのクレジット、本当に素晴らしいソリューション

3
David Sánchez
Date.prototype.daysinMonth: function(){
    var d= new Date(this.getFullYear(), this.getMonth()+1, 0);
    return d.getDate();
}

function daysinMonthfromInput(month,year){
    return (new Date(year,month-1,1)).daysinMonth();
}

alert(daysinMonthfromInput(2,2011));
2
kennebec

これがワンライナーです。 1月= 1、2月= 2などと言っていると仮定します。(正常です)うるう年の例を次に示します。

var y = 2012;
var m = 2;
var daysInMonth = new Date(y,m,1,-1).getDate();
1
Adam

現在のプロジェクトでこのアプローチを使用していますが、丸め誤差を修正する必要があることがわかりました。したがって、コードでmonthLengthを使用する代わりに、代わりにこれを使用する必要がありました。

monthLength.toFixed(0)

たとえば、テキストの日付フィールドを格納しているオブジェクトがある場合、次のようになります。

obj.month = theMonths[mm - 1] + " " + monthLength.toFixed(0) + ", " + obj.year;
0
user3018981

あなたは実際にこれを使うことができます:

var curdate = new Date(); DaysMonth = 32-新しいDate(curdate.getYear()、curdate.getMonth()、32).getDate();

;)

0
reynan