<SCRIPT type="text/JavaScript">
<!--
//
// カレンダー自動生成スクリプト
// Calendar.js Ver. 2.3.0, 2008/04/07 最終更新
// by michi[at]ep.sci.hokudai.ac.jp
// http://www.ep.sci.hokudai.ac.jp/~michi/
//
// メイン関数
//
function Calendar(Y, M){
// ユーザー情報を格納するオブジェクトを作成
var U = new Object();
/* ユーザ設定項目 */
// 空欄の文字
U.Empty = "*";
// 曜日の表示形式
// U.Week = new Array( "日", "月", "火", "水", "木", "金", "土" );
U.Week = new Array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" );
// 月の表示形式
U.Month = new Array(12);
/*
U.Month[0] = "1月";
U.Month[1] = "2月";
U.Month[2] = "3月";
U.Month[3] = "4月";
U.Month[4] = "5月";
U.Month[5] = "6月";
U.Month[6] = "7月";
U.Month[7] = "8月";
U.Month[8] = "9月";
U.Month[9] = "10月";
U.Month[10] = "11月";
U.Month[11] = "12月";
*/
U.Month[0] = "January";
U.Month[1] = "February";
U.Month[2] = "March";
U.Month[3] = "April";
U.Month[4] = "May";
U.Month[5] = "June";
U.Month[6] = "July";
U.Month[7] = "August";
U.Month[8] = "September";
U.Month[9] = "October";
U.Month[10] = "November";
U.Month[11] = "December";
/* ユーザ設定項目終了 */
/* ローカル関数をセット */
// Math.floor() のエイリアス
function M_F(num){ return Math.floor(num); }
// 春分日・秋分日簡易算出関数
function CalcEquinox(year, type){
// 変数をセット
var i = 0, j = year - 1980;
switch(type){
case 0: // 春分
if(1851 <= year && year <= 1899){
i = 19.8277;
} else if(1900 <= year && year <= 1979){
i = 20.8357;
} else if(1980 <= year && year <= 2099){
i = 20.8431;
} else if(2100 <= year && year <= 2150){
i = 21.8510;
}
break;
case 1: // 秋分
if(1851 <= year && year <= 1979){
i = 22.2588;
} else if(1980 <= year && year <= 2150){
i = 23.2488;
}
break;
}
return M_F(i + 0.242194 * j - M_F(j / 4));
}
// 祝日判定関数
function CheckHolyday(obj){
var Y = obj.Y, D = obj.D, N = obj.N, W = obj.W;
switch(obj.M){
case 0:
// 1月 1日:元旦
if(D == 1){ return true; }
// 1月 第ニ月曜:成人の日
// (1949~2000年は1月15日)
if((1949 <= Y && Y <= 2000 && D == 15 ) ||
(Y >= 2001 && N == 2 && W == 1)){
return true;
}
break;
case 1:
// 2月 11日:建国記念の日
if(Y >= 1967 && D == 11){ return true; }
// 1989年2月24日(金) 昭和天皇の大喪の礼
if(Y == 1989 && D == 24 ){ return true; }
break;
case 2:
// 3月 *日:春分の日
if(Y >= 1949 && D == CalcEquinox(Y, 0)){
return true;
}
break;
case 3:
// 1959年4月10日(金) 皇太子明仁親王の結婚の儀
if(Y == 1959 && D == 10 ){ return true; }
// 4月 29日:昭和の日
// (1949~1988年は天皇誕生日)
// (1989~2006年はみどりの日)
if(Y >= 1949 && D == 29){ return true; }
break;
case 4:
// 5月 3日:憲法記念日
if(Y >= 1949 && D == 3){ return true; }
// 5月 4日:みどりの日
// (1986~2006年は国民の休日)
if(Y >= 1986 && D == 4){ return true; }
// 5月 5日:こどもの日
if(Y >= 1949 && D == 5){ return true; }
break;
case 5:
// 1993年6月9日(水) 皇太子徳仁親王の結婚の儀
if(Y == 1993 && D == 9){ return true; }
break;
case 6:
// 7月 第三月曜:海の日
// (1996~2002年は7月20日)
if((1996 <= Y && Y <= 2002 && D ==20 ) ||
(Y >= 2003 && N == 3 && W == 1)){
return true;
}
break;
case 8:
// 9月 第三月曜:敬老の日
// (1966~2002年は9月15日)
if((1966 <= Y && Y <= 2002 && D == 15 ) ||
(Y >= 2003 && N == 3 && W == 1)){
return true;
}
// 9月 *日:秋分の日
if(Y >= 1948 && D == CalcEquinox(Y, 1)){
return true;
}
// 敬老の日と秋分の日に挟まれると
// 国民の休日になる
if(Y >= 2003 && N == 3 && W == 2 &&
D == CalcEquinox(Y, 1) - 1){
return true;
}
break;
case 9:
// 10月 第二月曜:体育の日
// (1966~1999年は10月10日)
if((1966 <= Y && Y <= 1999 && D == 10 ) ||
(Y >= 2000 && N == 2 && W == 1)){
return true;
}
break;
case 10:
// 11月 3日:文化の日
if(Y >= 1948 && D == 3){ return true; }
// 1990年11月12日(月) 即位礼正殿の儀
if(Y == 1990 && D == 12){ return true; }
// 11月 23日:勤労感謝の日
if(Y >= 1948 && D == 23){ return true; }
break;
case 11:
// 12月 23日:天皇誕生日
if(Y >= 1989 && D == 23){ return true; }
break;
}
return false;
}
// 曜日用 css 設定関数
function SetCSS(week){
switch(week){
case 0: return "sun";
case 6: return "sat";
default: return "nor";
}
return false;
}
// 現在の日時を取得
var N = new Object();
N.T = new Date();
N.Y = N.T.getFullYear();
N.M = N.T.getMonth();
N.D = N.T.getDate();
if(N.Y < 2000){ N.Y += 1900; }
// 出力する月の情報を格納するオブジェクトをセット
var T = new Object();
if(Y == M_F(Y) && 1900 <= Y && Y <= 2100 &&
M == M_F(M) && 1 <= M && M <= 12){
T.T = new Date(Y, (M - 1));
T.Y = Y;
} else{
T.T = N.T;
T.Y = N.Y;
}
T.T.setDate(1);
T.M = T.T.getMonth();
T.D = 1;
T.W = T.T.getDay();
if(T.Y != N.Y || T.M != N.M){ N.D = ""; }
T.N = 0;
var holiday = false, result = "", css;
var day_list = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if(T.Y % 4 == 0 && T.Y % 100 != 0 || T.Y % 400 == 0){ day_list[1]++; }
// テーブルのヘッダを作成
result += '<TABLE class="T_main"><TR><TD class="month">';
result += U.Month[T.M] + " " + T.Y;
result += '</TD></TR><TR><TD><TABLE class="T_sub"><TR>';
// 曜日を作成
for(var i = 0; i <= 6; i++){
result += '<TD class="' + SetCSS(i) + '">' + U.Week[i] + '</TD>';
}
result += '<\/TR><TR>';
// 日付を作成
for(var i = 0; i < T.W; i++){
result += '<TD class="emp">' + U.Empty + '</TD>';
}
for(T.D; T.D <= day_list[T.M]; T.D++){
if(T.W == 1){
T.N++;
} else if(T.W > 6){
result += '</TR><TR>';
T.W = 0;
}
// 色の決定
if(CheckHolyday(T)){
css = "sun";
if(T.W == 0){ holiday = true; }
} else if(holiday){
css = "sun";
holiday = false;
} else{
css = SetCSS(T.W);
}
result += '<TD class="' + css;
if(T.D == N.D){ result += '" id="Today'; }
result += '">' + T.D + '</TD>';
if(holiday && T.W != 0 && T.Y <= 2006){
holiday = false;
}
T.W++;
}
//
// テーブルのフッタを作成
//
for(T.W; T.W <= 6; T.W++){
result += '<TD class="emp">' + U.Empty + '</TD>';
}
// 結果を出力
return result + '</TR></TABLE></TD></TR></TABLE>';
}
//
// DHTML 出力用関数
//
function SetCalendar(form){
// 変数をセット
var Y = form.Y.value - 0;
var M = form.M.value - 0;
var ID = "CL";
// カレンダーを出力
if(document.getElementById || window.opera){
document.getElementById(ID).innerHTML = Calendar(Y, M);
} else if(document.layers){
document.layers[ID].document.open();
document.layers[ID].document.write(Calendar(Y, M));
document.layers[ID].document.close();
} else if(document.all){
document.all(ID).innerHTML = Calendar(Y, M);
}
}
//-->
</SCRIPT>
|