加算前の日付が月末だと、単純に月の加算をすると意図した結果にならない。
意図する結果については場合によると思うが、今回は加算した月の末日としたい場合。
例えば、2016/01/31
に1ヶ月後を取得したら2016/02/29
としたいが、以下のように単純に月を加算すると、実行結果は2016/03/02
となる。
function addMonths(date, months) {
var resultDate = new Date(date.getTime());
resultDate.setMonth(date.getMonth() + 1);
return resultDate;
}
var date = addMonths(new Date("2016/01/31"), 1);
これは月を加算すると2016/02/31
となり、2月は29日(2016年は閏年)までしかなく、2日はみ出てしまうから。
月末日に調整したい場合は、以下のように日にちを判定して補正してあげれば2016/02/29
となる。
(setDate(0)
は前月の月末となる)
function addMonths(date, months) {
var resultDate = new Date(date.getTime());
resultDate.setMonth(date.getMonth() + 1);
if (date.getDate() > date.getDate()) {
resultDate.setDate(0);
}
return resultDate;
}
var date = addMonths(new Date("2016/01/31"), 1);