11

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

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

4

8 に答える 8

30

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

// 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];
}
于 2011-02-03T01:50:34.400 に答える
18

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

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はゼロベースであることに注意してください(との間0でなければなりません11

于 2011-02-03T01:55:28.360 に答える
3

別の投稿からコピー: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へのすべてのクレジット、本当に素晴らしいソリューション

于 2014-06-30T06:25:06.087 に答える
2
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));
于 2011-02-03T04:05:57.417 に答える
1

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

var y = 2012;
var m = 2;
var daysInMonth = new Date(y,m,1,-1).getDate();
于 2013-08-09T12:26:11.153 に答える
0

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

monthLength.toFixed(0)

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

obj.month = theMonths[mm - 1] + " " + monthLength.toFixed(0) + ", " + obj.year;
于 2014-02-07T14:19:41.490 に答える
0

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

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

;)

于 2015-03-18T03:11:58.573 に答える
-2
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();
};
function fillallday (elem, month, year) {
     var options = null;
     var elementExists = document.getElementById(elem);

     if (elementExists != null) {

         this.removeOptions(elementExists);
         var opt = document.createElement('option');
         opt.value = "";
         opt.innerHTML = "---Day---";
         elementExists.appendChild(opt);
         if (month != "") {
             if (typeof (year) === "undefined") {
                 year = new Date().getFullYear();
             }
             if (year == "") {
                 year = new Date().getFullYear();
             }
             var days = daysinMonthfromInput(month, year);
             for (var i = 1; i <= days; i++) {
                 var opt = document.createElement('option');
                 opt.value = i;
                 opt.innerHTML = i;
                 elementExists.appendChild(opt);
             }
         }
     }

 }
于 2016-01-12T11:25:42.373 に答える