// 変数の設定 var monthDay = new Array(31,28,31,30,31,30,31,31,30,31,30,31); var weekHead = new Array('日','月','火','水','木','金','土'); var today=new Date(); var thisYear = today.getYear(); if (thisYear < 1900) { thisYear = thisYear + 1900; } var thisMonth = today.getMonth(); var thisDay = today.getDate(); function Cal(name, own, obj) { this.name = name; this.own = own; this.obj = obj; this.crntYear = 0; this.crntMonth = 0; this.crntDay = 0; this.crntMonthDay = 0; this.crntStartDay = 0; this.head = ''; this.foot = ''; return(this); } Cal.prototype.disp = function (yyyy, mm, dd) { this.setCrnt(yyyy, mm, dd); this.writeCal(); } Cal.prototype.dispPrev = function () { this.setCrntPrev(); this.writeCal(); } Cal.prototype.dispNext = function () { this.setCrntNext(); this.writeCal(); } Cal.prototype.writeCal = function () { var d = this.obj.document; var str; var i, w; // HTMLヘッダの表示 if (this.head) { d.open(); d.writeln(this.head); } // カレンダタイトルの表示 str = ''; str += ''; str += ''; str += ''; str += ''; // 曜日タイトルの表示 str += ''; str += ''; for (i=1; i<6; i++) { str += ''; } str += ''; // カレンダの表示 str += ''; // 月初の空白表示 for (i = 0; i < this.startDay; i++) { str += ''; } // 1ヶ月の表示 for (i = 1, w = this.startDay; i <= this.crntMonthDay; i++, w++) { // 週単位の改行 if (w > 6) { w = 0; str += ''; } // 今日の色分け表示 if ((i == thisDay) && (this.crntMonth == thisMonth) && (this.crntYear == thisYear)) { str += ''; } else { // 曜日による色分け表示 if (w == 0) { str += ''; } else if (w == 6) { str += ''; } else { str += ''; } } } // 月末の空白表示 for (; w < 7; w++) { str += ''; } str += '
'; str += ''; str += ''; str += this.crntYear + '年' + (this.crntMonth + 1) + '月'; str += ''; str += ''; str += '
' + weekHead[0] + '' + weekHead[i] + '' + weekHead[6] + '
 
' + i + '' + i + '' + i + '' + i + ' 
'; // カレンダの表示 d.writeln(str); // HTMLフッタの表示 if (this.foot) { d.writeln(this.foot); d.close(); } } Cal.prototype.setHead = function (str) { this.head = str; } Cal.prototype.setFoot = function (str) { this.foot = str; } Cal.prototype.setCrnt = function (yyyy, mm, dd) { //alert(this.crntYear+'/'+(this.crntMonth+1) + ', ' + yyyy+'/'+mm); // 年変換(1901-2099) if ((typeof(yyyy) == 'undefined') || (yyyy < 1901) || (yyyy > 2099)) { this.crntYear = thisYear; } else { this.crntYear = yyyy; } // 月変換(0-11) if ((typeof(mm) == 'undefined') || (mm < 1) || (mm > 12)) { this.crntMonth = thisMonth; } else { this.crntMonth = mm - 1; } // うるう年変換(1901年から2099年まで対応) if ((this.crntMonth == 1) && (this.crntYear % 4 == 0)) { this.crntMonthDay = 29; } else { this.crntMonthDay = monthDay[this.crntMonth]; } // 日変換(1-31:this.crntMonthDay) if ((typeof(dd) == 'undefined') || (dd < 1) || (dd > this.crntMonthDay)) { this.crntDay = thisDay; } else { this.crntDay = dd; } // 開始曜日の設定 var d1 = new Date(this.crntYear + '/' + (this.crntMonth + 1) + '/01'); this.startDay = d1.getDay(); } Cal.prototype.setCrntPrev = function () { // 前月のカレンダ表示 var yyyy = this.crntYear; var mm = this.crntMonth; var dd = this.crntDay; if (mm < 1) { yyyy--; mm = 12; } this.setCrnt(yyyy, mm, dd); } Cal.prototype.setCrntNext = function () { // 翌月のカレンダ表示 var yyyy = this.crntYear; var mm = this.crntMonth + 2; var dd = this.crntDay; if (mm > 12) { yyyy++; mm = 1; } this.setCrnt(yyyy, mm, dd); }