■ JavaScript による calendar

JavaScript でカレンダー を作成しました。 少々重いですけど。

前月 今月 来月

今年一年分です。


来年一年分です。

// -*-mode: Text; coding: iso-2022-jp; -*-
// /home/tetsu/public_html/js/cal.js
// created: November 06,2001 Tuesday 02:22:28
// author: tetsu(WATANABE Tetsuya)
// $Id: cal.js,v 1.5 2007/12/04 00:10:09 tetsu Exp $

function year_off() {
  if (navigator["userAgent"].indexOf("MSIE", 0) == -1) {
    return 1900;
  } else {
    return 0;
  }
}
function mksyunbun(year) {
  var v;
  if (year < 2000) {
    v = 2213;
  } else {
    v = 2089;
  }
  return Math.floor((31 * year + v)/128) - Math.floor(year/4) + Math.floor(year/100);
}
function mksyubun(year) {
  var v;
  if (year < 2000) {
    v = 2525;
  } else {
    v = 2395;
  }
  return Math.floor((31 * year + v)/128) - Math.floor(year/4) + Math.floor(year/100);
}
function calendar(opt_year, opt_month) {
  var mday_arr = new Array(31);
  var holiday = new Array(31);
  var year, month, mday;
  var date_obj = new Date();
  var monday = 0;
  var i;
  if (opt_year) {
    year = opt_year;
  } else {
    year = date_obj.getYear() + year_off();
  }
  if (opt_month) {
    month = opt_month;
  } else {
    month = date_obj.getMonth() + 1;
  }
  if (year == (date_obj.getYear() + year_off()) &&
      month == (date_obj.getMonth() + 1)) {
    mday = date_obj.getDate();
  } else {
    mday = 0;
  }
  var syunbun = mksyunbun(year);
  var syubun = mksyubun(year);
  var lastday = 31;
  for (i = 1; i <= 31; i++) {
    mday_arr[i] = new Date(Date.UTC(year, month - 1, i));
    holiday[i] = "";
    if (month - 1 != mday_arr[i].getMonth()) {
      lastday = i - 1;
      break;
    }
    if (mday_arr[i].getDay() == 1) {
      monday++;
    }
    if (month == 1 && i == 1) {
      holiday[i] = "元旦";
    } else if (i == 15 && month == 1 && year < 2000) {
      holiday[i] = "成人の日";
    } else if (monday == 2 && month == 1 && mday_arr[i].getDay() == 1 && year >= 2000) {
      holiday[i] = "成人の日";
    } else if (i == 11 && month == 2) {
      holiday[i] = "建国記念の日";
    } else if (i == syunbun && month == 3) {
      holiday[i] = "春分の日";
    } else if (i == 29 && month == 4 && year < 2007) {
      holiday[i] = "みどりの日";
    } else if (i == 29 && month == 4 && year >= 2007) {
      holiday[i] = "昭和の日";
    } else if (i == 3 && month == 5) {
      holiday[i] = "憲法記念日";
    } else if (i == 4 && month == 5 && year >= 2007) {
      holiday[i] = "みどりの日";
    } else if (i == 5 && month == 5) {
      holiday[i] = "こどもの日";
    } else if (i == 20 && month == 7 && year >= 1996 && year <= 2002) {
      holiday[i] = "海の日";
    } else if (monday == 3 && month == 7 && mday_arr[i].getDay() == 1 && year >= 2003) {
      holiday[i] = "海の日";
    } else if (i == 15 && month == 9 && year <= 2002) {
      holiday[i] = "敬老の日";
    } else if (monday == 3 && month == 9 && mday_arr[i].getDay() == 1 && year >= 2003) {
      holiday[i] = "敬老の日";
    } else if (i == syubun && month == 9) {
      holiday[i] = "秋分の日";
    } else if (i == 10 && month == 10 && year < 2000) {
      holiday[i] = "体育の日";
    } else if (monday == 2 && month == 10 && mday_arr[i].getDay() == 1 && year >= 2000) {
      holiday[i] = "体育の日";
    } else if (i == 3 && month == 11) {
      holiday[i] = "文化の日";
    } else if (i == 23 && month == 11) {
      holiday[i] = "勤労感謝の日";
    } else if (i == 23 && month == 12 && year >= 1989) {
      holiday[i] = "天皇誕生日";
    }
  }
  if (year >= 1986) {
    i = 1;
    while (i < lastday - 2) {
      if (holiday[i] != "" && holiday[i + 1] == "" && holiday[i + 2] != "" && mday_arr[i + 1].getDay() != 0) {
        holiday[i + 1] = "国民の休日";
        i++;
      }
      i++;
    }
  }
  var month_name = new Array(12);
  month_name[1]  = 'January';
  month_name[2]  = 'February';
  month_name[3]  = 'March';
  month_name[4]  = 'April';
  month_name[5]  = 'May';
  month_name[6]  = 'June';
  month_name[7]  = 'July';
  month_name[8]  = 'August';
  month_name[9]  = 'September';
  month_name[10] = 'October';
  month_name[11] = 'November';
  month_name[12] = 'December';
  document.write("<code>");
  var d = Math.floor((20 - (month_name[month].length + 5))/2);
  for (i = 0; i < d; i++) {
    document.write('&nbsp;');
  }
  document.write('<i>', month_name[month], ' ', year, '</i>');
  for (i = 0; i < d; i++) {
    document.write('&nbsp;');
  }
  document.writeln("<br>");
  document.write("<i>Su Mo Tu We Th Fr Sa</i>");
  var start_wday = mday_arr[1].getDay();
  var ln_count = 0;
  if (start_wday != 0) {
    document.writeln("<br>");
    ln_count++;
  }
  for (i = 0; i < start_wday; i++) {
    document.write('&nbsp;&nbsp;&nbsp;');
  }
  for (i = 1; i <= lastday; i++) {
    var wday = mday_arr[i].getDay();
    var flag = 0;
    if (wday == 0) {
      document.writeln("<br>");
      ln_count++;
      document.write("<font color=\"red\">");
    } else if (wday == 6) {
      document.write("<font color=\"red\">");
    } else if (year >= 1973 && wday == 1 && i > 1 && holiday[i - 1] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    } else if (year >= 2005 && wday == 2 && i > 2 && holiday[i - 1] != "" && holiday[i - 2] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    } else if (year >= 2005 && wday == 3 && i > 3 && holiday[i - 1] != "" && holiday[i - 2] != "" && holiday[i - 3] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    } else if (year >= 2005 && wday == 4 && i > 4 && holiday[i - 1] != "" && holiday[i - 2] != "" && holiday[i - 3] != "" && holiday[i - 4] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    } else if (year >= 2005 && wday == 5 && i > 5 && holiday[i - 1] != "" && holiday[i - 2] != "" && holiday[i - 3] != "" && holiday[i - 4] != "" && holiday[i - 5] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    } else if (holiday[i] != "") {
      document.write("<font color=\"red\">");
      flag = 1;
    }
    if (i < 10) {
      document.write('&nbsp;');
    }
    if (mday == i) {
      document.write(i.toString().bold());
    } else {
      document.write(i);
    }
    if (wday != 6) {
      document.write('&nbsp;');
    }
    if (wday == 0 || wday == 6 || flag == 1) {
      document.write("</font>");
      flag = 0;
    }
  }
  document.writeln("<br>");   
  ln_count++;
  for (i = ln_count; i < 7; i++) {
    document.writeln("<br>");   
  }
  document.writeln("</code>");
}

渡辺哲也(WATANABE Tetsuya): Tetsuya.WATANABE atmark nifty.com