プロが教えるわが家の防犯対策術!

こんにちは。

yyyy/mm から n ヶ月後の月を返すスクリプトって
どのようにして書くんでしょうか?
getMonth() を使っても、今が 10 月だとすると単純に 3 を足すと 13 月になってしまいますよね。
本当は yyyy(次の年)/01 と表示してほしいんです。
だから、 new Date() から n ヶ月分を足そうとしてるんですが、月によって日にちが違うので、ミリ秒で加減するのはめんどくさいですよね。

なにか良い方法はありませんか?

A 回答 (3件)

すみません。


最近JavaScriptから離れていたので、思わず自力で解いてしまいました。
DateオブジェクトのsetMonthメソッドを使うともっと簡単にできます。

var n = 3;
var tmp = new Date();

// setMonthで、「現在月 = 現在月 + nヶ月」を行う
tmp.setMonth( tmp.getMonth() + n );

var year = tmp.getFullYear();
var mon = tmp.getMonth();
var date = year + "/" + (mon < 9 ? '0' : '') + (mon + 1);
alert(date);
    • good
    • 1

基本的に、月は 0~11 で扱うものとします。

(getMonth() の戻値と同じ)
まず、nヶ月後の月(現在月+n)の値を12で割ります。
その商を現在年に加えたものがnヶ月後の年になり、余りがnヶ月後の月になります。
また、nに現在月より大きい負数を指定すると余りも負数になってしまうため、この場合は 0 以上になるまで 12 を加えます。
スクリプトは、下のようになります。

var n = 3;

var now = new Date();
var year = now.getFullYear();
var mon = now.getMonth();

var tmp = addMonth(year, mon, n);
var date = tmp.year + "/" + (tmp.month < 9 ? '0' : '') + (tmp.month + 1);
alert(date);

// nヵ月後の年月を返す関数
function addMonth(y, m, add) {
  var obj = new Object();
  obj.year = y + Math.floor((m + add) / 12);
  obj.month = (m + add) % 12;
  while (obj.month < 0)
    obj.month += 12;
  return obj;
}
    • good
    • 1

if分岐するほかないのでは?


getMonthで単純に月を加算して、それが12以上だったら12を引き、年に1を加算・・・という手順で。
12ヶ月以上の値が入るのであれば、そのチェックもしなくてはいけませんね。

JavaScriptの場合、変数に型がありませんから、自動的に判断はしてくれなかったと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!