Dateを使用したカレンダーの作成 〜一週間で区切る〜

前回のカレンダーをちょっと改良。日付がそのまま表示されるだけだと、どうしてもカレンダーっぽくないから、きちんと土曜日で改行されるようにしてみた。動かすのが面倒だったから、今月のみを表示する。

main.js

function disp_cal() {

	var table = document.createElement('table');
	var tbody = document.createElement('tbody');

	/*
	  カレンダーの表示
	*/
	// 現在の日付の取得
	var now = new Date();

	// 月の初日・最終日の取得
	var start = new Date(now.getYear(), now.getMonth(), 1);
	var end = new Date(now.getYear(), now.getMonth() + 1, 0);

	// 月の初日の曜日から何回ずらすかを求める
	for(var i=-(start.getDay() - 1); i<=end.getDate(); ) {
		var tr = document.createElement('tr');
		// 7日毎に改行を行う
		for(var j=0; j<6; j++) {
			var td = document.createElement('td');
			// 日付が月の内なら日付を表示
			if(i>=1 && i<=end.getDate()) {
				td.innerHTML = i;
			}
			tr.appendChild(td);
			i++;
		}
		tbody.appendChild(tr);
	}

	table.appendChild(tbody);
	document.getElementById("result").appendChild(table);
}

function load() {
	document.getElementById("result").innerHTML = "";
	disp_cal();
}

実行結果

1 2 3 4
5 6 7 8 9 10
11 12 13 14 15 16
17 18 19 20 21 22
23 24 25 26 27 28
29 30 31

まとめ

う〜ん。。。途中のfor文が非常にトリッキー。もうちょっとうまいやり方があるんだろうけど、面倒だからこれでいい。