JavaScriptでの日付の計算

Pocket
このエントリーをはてなブックマークに追加

※他Blogリニューアルの為、記事を転載

例えば、本日日付から3ヶ月前の日付を取得したい場合、どうするか。

色々考えた挙句、以下のような方法になった。。

※コメント全然書いてないですが。。。

1) まず、本日日付の取得(yyyymmddの文字列とする)

nowdate = new Date();

var nowyear = nowdate.getFullYear();

var nowmonth = nowdate.getMonth() + 1;

var nowday = nowdate.getDate();

if (nowmonth.toString().length == 1) {

nowmonth = “0” + nowmonth;

}

nowday = “” + nowday;

if (nowday.toString().length == 1) {

nowday = “0” + nowday;

}

var result = nowyear + “” + nowmonth + “” + nowday;

結果:20070321

2) 3ヶ月前の日付を取得(単純に月に3を減算する)

var befyear = parseInt(result.substring(0, 4));

var befmonth = parseInt(result.substring(4, 6));

var befday = parseInt(result.substring(6, 8));

if ( befmonth < 4 ) {

befmonth = befmonth + 12;

befyear = befyear – 1;

}

befmonth = befmonth – 3;

// 連結

result = befyear.toString() + befmonth.toString() + befday.toString();

結果:20061221

上記で3ヶ月前の日付を取得出来そうなのだが、例えば、

2007/05/30

の3ヶ月前の場合、上記だと、

2007/02/30

となってしまう。

こんな日付は無いので、どうするかと言うと・・・

3ヶ月前と取得した、20070230 を・・・

var UCTDate = new Date(result.substring(0,4) + “/” + result.substring(4,6) + “/” + result.substring(6,8));

// 1970年1月1日0時0分0秒(UTC)からのミリ秒数換算

result = UCTDate.getTime();

とする。

2007/02/30 を一度DATE型へキャストし、キャストしたDATE型の日付を、ミリ秒へとキャスト。

※1970/01/01 00:00:00.00 からの経過ミリ秒数

んでもって、

var tDate = new Date();

tDate.setTime(result);

// それぞれ取得

var tmpyear = tDate.getFullYear();

var tmpmonth = tDate.getMonth() + 1;

var tmpdate = tDate.getDate();

// yyyymmddのフォーマットへ

if (tmpmonth.toString().length == 1) {

tmpmonth = “0” + tmpmonth;

}

if (tmpdate.toString().length == 1) {

tmpdate = “0” + tmpdate;

}

// 連結

result = tmpyear + “” + tmpmonth + “” + tmpdate;

ミリ秒数へとキャストした値を、もう一度DATE型へ戻す。

すると、

2007/02/30 としていた日付が、2007/03/02 へ変更されるのです。

本日日付に90日を減算してもいいのだが・・・

とりあえず、現状は上記にて落ち着いた感じですわ。

他にいい方法があれば、教えてくだされ。

でわ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です