JavaScript after

これを書き直したもの。

参照エントリ(の一部)

他にもたくさん参照した

リファクタリング後のコードここから

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<meta name="robots" content="noindex">
	<title>日数チェッカー</title>
</head>
<body>
<h1>日数チェッカー</h1>
<h2>今日は<span id="today">fuga</span>です</h2>

<script>
/*-------------------------------------------------------------------*/

var t = new Date();
var todaySec = t.getTime();

/*-------------------------------------------------------------------*/

function getAfterDay(n) {
    // n 日後の日付を求める
    var nDateSec = todaySec + n * (1000*60*60*24);
    var nDate = new Date();
    nDate.setTime(nDateSec);
    return nDate;
}

function getMonthEndDay(year, month) {
    // 月末の日付を求める
    // 日付を 0 にすると前月の末日を指定できる
    var day = new Date(year, month, 0);
    var endDate = day.getDate();
    return endDate;
}

function getDiffDate(baseDate, anotherDate) {
    // 2 つの日付の差分を求める
    // baseDate < anotherDate
    var baseSec = baseDate.getTime();
    var anotherSec = anotherDate.getTime();
    var diffSec = anotherSec - baseSec;
    var diffDate = Math.floor(diffSec / (1000*60*60*24));
    return diffDate;
}

/*-------------------------------------------------------------------*/

function getDayFormated(n) {
    // n 日後の日付を使用する形式で求める
    var date = getAfterDay(n);
    var string =  (date.getMonth() + 1) + "月" + date.getDate() + "日";
    return string;
}

function getPrjPassDate(n) {
	// n 日後のプロジェクト開始後日数を求める
	var basePrjDate = new Date(2012,11-1,2); // この日が 0 日目
    var day = getAfterDay(n);
    return getDiffDate(basePrjDate, day);
}

function getPrjRestDate(n) {
    // n 日後の 1000 日からの逆算日数を求める
    return 1000 - getPrjPassDate(n);
}

function quarterRestDate(n) {
    // n 日後の日付について四半期からの残り日数を求める
    var nday = getAfterDay(n);
    var year = nday.getFullYear();
    var month = nday.getMonth() + 1;
    // month は現実の月を表す
    var qtMonth = 0;
    if (month <= 3) {
        qtMonth = 1;
    } else if (month <= 6) {
        qtMonth = 4;
    } else if (month <= 9) {
        qtMonth = 7;
    } else {
        qtMonth = 10;
    }
    
    var array = [qtMonth, qtMonth + 1, qtMonth + 2];
    var maxDate = 0;
    for (var i = 0; i < array.length; i++) {
        maxDate += getMonthEndDay(year, array[i]);
    }

    var startDate = new Date(year, qtMonth - 1, 1);
    var restDate = (maxDate - 1) - getDiffDate(startDate, nday);
    return restDate;
}

/*-------------------------------------------------------------------*/

function writeAll(n) {
    // n 日後の各数値を出力する
    var day = getDayFormated(n);
    var prjPassDate = getPrjPassDate(n);
    var prjRestDate = getPrjRestDate(n);
    var qtRestDate = quarterRestDate(n);

    document.write('<pre><br>\
----------------------------<br>\
<br>\
平成25年' + day + '<br>\
<br>\
----------------------------<br>\
<br>\
prjPassDate + '日目<br>\
<br>\
(四半期残 ' + qtRestDate + '日 / 残' + prjRestDate + '日)<br>\
<br>\
----------------------------<br>\
<br>\
</pre>');
}

function writeDate(n) {
	// 日付を曜日付きで出力する
	var week = new Array("日", "月", "火", "水", "木", "金", "土");
	var dateString = t.getFullYear() + "年" + (t.getMonth() + 1) + "月" + t.getDate() + "日" + "(" + week[t.getDay()] + ")";
	return dateString;
}

/*-------------------------------------------------------------------*/

// h2 で今日の日付を表示する
var todayDate = document.getElementById('today');
todayDate.innerHTML = writeDate(0);

// writeAll 5 日分
for (var i =0; i < 6; i++) {
	writeAll(i);
}

/*-------------------------------------------------------------------*/
</script>

</body>
</html>