JavaScriptのシンプルなカレンダーです。 丁度ブログのカレンダーのような感じでしょうか。 記事へのリンクは付きませんが(笑)
表(table)として出力され、スタイルシートによりカスタマイズする事が出来ます。

カレンダーを生成するJavaScriptです。 今日の日付を取得し、閏年の判定、曜日の算出、テーブルの出力を行います。 <head>〜</head>の中に置いてください。

<script type="text/javascript"><!--
function cal(year,month,day) {
 today=new Date();
 if (!year) var year=today.getFullYear();
 if (!month) var month=today.getMonth();
 else month--;
 if (!day) var day=today.getDate();
 var leap_year=false;
 if ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) leap_year=true;
 lom=new Array(31,28+leap_year,31,30,31,30,31,31,30,31,30,31);
 dow=new Array("日","月","火","水","木","金","土");
 var days=0;
 for (var i=0; i < month; i++) days+=lom[i];
 var week=Math.floor((year*365.2425+days)%7);
 var j=0;
 var when=year+"年 "+(month+1)+"月";
 var calendar="<table summary=\""+when+"のカレンダー\">\n";
 calendar+="<caption>"+when+"<\/caption>\n<tr>";
 for (i=0; i < 7; i++) calendar+="<td>"+dow[i]+"<\/td>";
 calendar+="<\/tr>\n<tr>";
 for (i=0; i < week; i++,j++) calendar+="<td><\/td>";
 for (i=1; i <= lom[month]; i++) {
  calendar+="<td";
  if (day == i) calendar+=" class=\"today\"";
  calendar+=">"+i+"<\/td>";
  j++;
  if (j > 6) {
   calendar+="<\/tr>\n<tr>";
   j=0;
  }
 }
 for (i=j; i > 6; i++) calendar+="<td><\/td>";
 calendar+="<\/tr>\n<\/table>\n";
 return calendar;
}
// --></script>

cal(年,月,日)として任意の年月日を指定出来ます。 cal() または cal(0,0,0) のように値を無し、または値を0とする事で今月のカレンダー を出力します。

出力は戻り値の文字列としていますので、document.write()を使って書き出して ください。
具体的にはスタイルシートでの装飾を考慮して適当なclassを設定したdiv等の中で scriptタグを使って document.write(cal(年,月,日)); とする事になります。 これを<body>〜</body>の配置したい場所に置いてください。

<div class="cal">
<script type="text/javascript">
document.write(cal());
</script>
</div>

続いてスタイルシートです。<head>〜</head>の中に置いてください。
このページ冒頭のカレンダーのスタイルシート設定例です。

<style type="text/css"><!--
div.cal { float: left; margin: 4px; }
div.cal * { text-align: center; font-size: 9pt; }
div.cal table { border: solid 1px green; width: 140px; }
div.cal caption { border: solid 1px green; border-bottom: none; background: aquamarine; }
div.cal td.today { background: aquamarine; }
--></style>

(注) MozillaやFirefoxで不具合が出ますので、marginはtableに直接適用しないで ください。(captionとtableの間に余白が出来てしまいます)
テーブルの行は月によって5〜7行の範囲で増減しますので、tableにno-repeatで 背景画像を貼る場合はその事も考慮する必要があります。
このカレンダーは手抜きのため日曜、祝日等の色分けは出来ません。
グレゴリオ暦の開始された1582年10月15日(金)よりも古い日付には対応しません。
また、グレゴリオ暦は1920年代以前は世界各地にまで普及していなかったようですので、 その当時のカレンダーは一致しない可能性あります。

カレンダーの表題(何年 何月)の部分はcaption、曜日の行はth、 日付はtdで構成しています。
本日(または指定日)のみ<td class="today">とクラス名が付加されます。
スタイルシートを活用する事で柔軟にカスタマイズする事が可能です。

<style type="text/css"><!--
div.cal { margin: 4px; }
div.cal * { text-align: center; font-size: 11pt; }
div.cal table { border: solid 2px hotpink; width: 160px; background: white; }
div.cal caption { border: solid 2px hotpink; border-bottom: none; background: hotpink; color: white; }
div.cal th { color: hotpink; }
div.cal td { color: pink; }
div.cal td.today { border: dotted 1px orange; color: hotpink; }
--></style>

<style type="text/css"><!--
div.cal { margin: 4px; }
div.cal * { text-align: center; font-size: 11pt; }
div.cal table { width: 160px; border-spacing: 0px; border: solid 1px red; border-top: none; background: url("rs160.png") top no-repeat; }
div.cal caption { border: solid 1px red; border-bottom: none; }
div.cal th { background: white; opacity: 0.5; filter: Alpha(opacity=50); }
div.cal td.today { background: yellow; }
--></style>

captionがSafariで表示するとボーダー幅の分狭く表示されます。また、captionの幅を 100%としてしまうとMozillaではtableからオーバーフローしてしまいます。(悩)