月、日、年の3つのドロップダウンがあるHTMLページがあり、月と年に応じて月のドロップダウンを適切に設定する方法があるかどうか疑問に思いました。
私はこれまでクライアント側でこれを行ったことがありませんが、jQueryDatePickerのような多くのコントロールが舞台裏でこれを行っているようです。
日付オブジェクトで遊ぶことができます:
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
の間にある必要があります)
私の知る限り、そのための(きちんとした)組み込み関数はありません。私はこれを一度書いた:
// 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];
}
別の投稿からコピー: 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();
;)