※他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日を減算してもいいのだが・・・
とりあえず、現状は上記にて落ち着いた感じですわ。
他にいい方法があれば、教えてくだされ。
でわ。