私は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;
}