今月のカレンダーを表示

  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>今月のカレンダーを表示</title>
  6. <style type="text/css">
  7. td, th
  8. {
  9.   border:1px solid #ccc;
  10. }
  11. .today
  12. {
  13.   font-weight:bold;
  14. }
  15. </style>
  16. <body>
  17. <h1>今月のカレンダーを表示</h1>
  18. <script type="text/javascript">
  19. /**
  20.  * 年月日に指定された数値を足して返す
  21.  * ymdDate:日付データ
  22.  * 追加する項目:年月日のどれか(ymd)
  23.  * 追加する数値
  24.  */
  25. function addDate(ymdDate, target, add)
  26. {
  27.   addNum = parseFloat(add);
  28.   
  29.   yea = ymdDate.getFullYear();
  30.   mon = ymdDate.getMonth();
  31.   day = ymdDate.getDate();
  32.   
  33.   if(target == "y")
  34.   {
  35.     yea += addNum;
  36.   }
  37.   else if(target == "m")
  38.   {
  39.     mon += addNum;
  40.   }
  41.   else if(target == "d")
  42.   {
  43.     day += addNum;
  44.   }
  45.   return new Date(yea, mon, day);
  46. }
  47. /**
  48.  * カレンダー用に日曜から1日、月末から土曜までを何かで埋め、配列にして返す
  49.  * year    表示するカレンダーの年
  50.  * month  表示するカレンダーの月
  51.  * Fill    日曜から1日まで、月末から土曜まで埋める文字
  52.  */
  53. function convertDayOfCalendar(year, month, Fill)
  54. {
  55.   // 月初と月末
  56.   var startMonth = new Date(year + "/" + month + "/1");
  57.   var endMonth   = addDate(new Date(year, month, 1), "d", -1);
  58.   
  59.   // カレンダー用に日にちを配列化:
  60.   DayArray = new Array();
  61.   
  62.   // 日曜~1日の空白を埋める。
  63.   for (i=0; i<startMonth.getDay(); i++)
  64.   {
  65.     DayArray.push(Fill);
  66.   }
  67.   
  68.   // 月初め(1日)~月末までを埋める
  69.   for (i=0; i<endMonth.getDate(); i++)
  70.   {
  71.     DayArray.push(i+1);
  72.   }
  73.   
  74.   // 月末~土曜の空白を埋める
  75.   if (endMonth.getDay() != 6)
  76.   {
  77.     startWeek = parseFloat(endMonth.getDay()) + 1;
  78.     for (i=startWeek; i<7; i++)
  79.     {
  80.       DayArray.push(Fill);
  81.     }
  82.   }
  83.   return DayArray;
  84. }
  85. function cal(year, month, day)
  86. {
  87.   // 年月日の指定が無ければ、今月のカレンダー
  88.   today=new Date();
  89.   var year  = year  || today.getFullYear();
  90.   var month = month || today.getMonth() + 1;
  91.   var day   = day   || today.getDate();
  92.   
  93.   // 曜日配列
  94.   week = new Array("日", "月", "火", "水", "木", "金", "土");
  95.   
  96.   // カレンダー用に日を配列化(日曜から1日までを何かで埋める)
  97.   DayArray = convertDayOfCalendar(year, month, "-");
  98.   
  99.   // 年月
  100.   when = year + "/" + month;
  101.   
  102.   var calendar = "";
  103.   calendar += '<table>';
  104.   calendar += "<caption>" + when + '</caption>';
  105.   
  106.   // 曜日
  107.   calendar += "<tr>";
  108.   for (i=0; i<7; i++)
  109.   {
  110.     calendar += '<th>' + week[i] + '</th>';
  111.   }
  112.   calendar += "</tr>";
  113.   
  114.   // (週単位で)日にち
  115.   for (j=0; j<DayArray.length; j++)
  116.   {
  117.     if (j%7 == 7)
  118.     {
  119.       calendar += '<tr>';
  120.     }
  121.     else if (j%7 == 0)
  122.     {
  123.       calendar += '</tr>';
  124.     }
  125.     
  126.     // 「今日」の場合はclassを追加。
  127.     todayClass = "";
  128.     if (day == DayArray[j])
  129.     {
  130.       todayClass = ' class="today"';
  131.     }
  132.     calendar += '<td' + todayClass + '>' + DayArray[j] + '</td>';
  133.   }
  134.   calendar += '</tr>';
  135.   calendar += '</table>' + "\n";
  136.   return calendar;
  137. }
  138. document.write(cal());
  139. </script>
  140. <div style="font-size:10pt;text-align:right;margin-top:0.5em;">
  141. <a href="//tips.recatnap.info/" target="_top">PCスキルの小技・忘却防止メモ</a> -
  142. <a href="//tips.recatnap.info/wiki/" target="_top">PCスキルの小技・忘却防止メモのまとめ(wiki)</a>
  143. </div>
  144. <div style="font-size:10pt;text-align:center;margin-top:0.5em;padding:0.5em;border-top:1px solid #ccc;">
  145. Copyright &copy; 2009 by PCスキルの小技・忘却防止メモ. All rights reserved.
  146. </div>
  147. </body>
  148. </html>