月、日、年の3つのドロップダウンがあるHTMLページがあり、月と年に応じて月のドロップダウンを適切に設定する方法があるかどうか疑問に思いました。
私はこれまでクライアント側でこれを行ったことがありませんが、jQueryDatePickerのような多くのコントロールが舞台裏でそれを行っているようです。
月、日、年の3つのドロップダウンがあるHTMLページがあり、月と年に応じて月のドロップダウンを適切に設定する方法があるかどうか疑問に思いました。
私はこれまでクライアント側でこれを行ったことがありませんが、jQueryDatePickerのような多くのコントロールが舞台裏でそれを行っているようです。
私の知る限り、そのための(きちんとした)組み込み関数はありません。私はこれを一度書いた:
// 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];
}
日付オブジェクトで遊ぶことができます:
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
)
別の投稿からコピー: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へのすべてのクレジット、本当に素晴らしいソリューション
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));
これがワンライナーです。1月=1、2月= 2などと言っていると仮定します。(正常です)うるう年の例を次に示します。
var y = 2012;
var m = 2;
var daysInMonth = new Date(y,m,1,-1).getDate();
現在のプロジェクトでこのアプローチを使用していますが、丸め誤差を修正する必要があることがわかりました。したがって、コードでmonthLengthを使用する代わりに、代わりにこれを使用する必要がありました。
monthLength.toFixed(0)
たとえば、テキストの日付フィールドを保存しているオブジェクトがある場合、次のようになります。
obj.month = theMonths[mm - 1] + " " + monthLength.toFixed(0) + ", " + obj.year;
あなたは実際にこれを使うことができます:
var curdate = new Date(); DaysMonth = 32-新しいDate(curdate.getYear()、curdate.getMonth()、32).getDate();
;)
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);
}
}
}
}