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>