私はXか月後の世界から来た人デース
なんだかよさげなものあったのでコピペします。
うるう年(閏年)の判定
function checkLeapyear(year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; }
n日後、n日前の日付を求める
/** * 年月日と加算日からn日後、n日前を求める関数 * year 年 * month 月 * day 日 * addDays 加算日。マイナス指定でn日前も設定可能 */ function computeDate(year, month, day, addDays) { var dt = new Date(year, month - 1, day); var baseSec = dt.getTime(); var addSec = addDays * 86400000;//日数 * 1日のミリ秒数 var targetSec = baseSec + addSec; dt.setTime(targetSec); return dt; }
任意の年月の月末日を求める
/** * 年月を指定して月末日を求める関数 * year 年 * month 月 */ function getMonthEndDay(year, month) { //日付を0にすると前月の末日を指定したことになります //指定月の翌月の0日を取得して末日を求めます //そのため、ここでは month - 1 は行いません var dt = new Date(year, month, 0); return dt.getDate(); }
nヶ月後、nヶ月前の日付を求める
/** * 年月日と加算月からnヶ月後、nヶ月前の日付を求める * year 年 * month 月 * day 日 * addMonths 加算月。マイナス指定でnヶ月前も設定可能 */ function computeMonth(year, month, day, addMonths) { month += addMonths; var endDay = getMonthEndDay(year, month);//ここで、前述した月末日を求める関数を使用します if(day > endDay) day = endDay; var dt = new Date(year, month - 1, day); return dt; }
2つの日付の差(何日間あるか)を求める
/** * 2つの日付の差を求める関数 * year1 1つのめ日付の年 * month1 1つめの日付の月 * day1 1つめの日付の日 * year2 2つのめ日付の年 * month2 2つめの日付の月 * day2 2つめの日付の日 */ function compareDate(year1, month1, day1, year2, month2, day2) { var dt1 = new Date(year1, month1 - 1, day1); var dt2 = new Date(year2, month2 - 1, day2); var diff = dt1 - dt2; var diffDay = diff / 86400000;//1日は86400000ミリ秒 return diffDay; }