TOP
<html lang="ja"> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> | |
<meta http-equiv="Content-Style-Type" content="text/css"> | |
<meta http-equiv="Content-Script-Type" content="text/javascript"> | |
<title>JavaScript カレンダー型スケジュール帳</title> | |
<style type="text/css"> | |
<!-- | |
--> | |
</style> | |
<script type="text/javascript"> | |
<!-- | |
/* 2007~2099年対応 JavaScriptカレンダー予定帳 ver. 1.5 | |
Copyright (c) Kumiko Maeda 2004 - 2008/09/05 */ | |
MAXEVENT = 50; //祝日+予定最大数 | |
SHOWWEEK = 6; //何週表示するか | |
//表示スタイルオプション | |
WIDTH = "80px"; //1マスの幅 <td width="***"> | |
HEIGHT = "60px"; //1マスの高さ <tr height="***"> | |
DEFAULT = "bordercolor='#cc8066' bgcolor='#fff9f6' style='font-size:9pt; color:#993333;'"; | |
//枠線の色とフォントサイズ.デフォルトの背景色と文字色とかも<table ***> | |
TODAY = "bgcolor='#e6fff6'"; //今日のセルオプション<td ***> | |
HOLIDAY = "bgcolor='#ffe6e6'"; //日曜・祝日のセルオプション | |
SATURDAY = "bgcolor='#e6e6ff'"; //土曜のセルオプション | |
USUALDAY = ""; //なんでもない日のセルオプション | |
SUN = "bgcolor='#f9d9c3' style='color:#ff0000;'"; //1列目日曜のセルオプション | |
SAT = "bgcolor='#f9d9c3' style='color:#0000ff;'"; //1列目土曜のセルオプション | |
MON = "bgcolor='#f9d9c3'"; //1列目月曜~金曜のセルオプション | |
weekTable = new Array("sun","mon","tue","wed","thu","fri","sat"); //1列目 | |
monthTable= new Array(31,28,31,30,31,30,31,31,30,31,30,31); //いじるな危険 | |
// | |
/*** スケジュール登録 notice *** | |
予定はsetSchedules()に書く. | |
newSchedule( 年,月, 日,"td セルオプション", "予定" ); | |
・日 | |
-calDate( 年, 月, 週, 曜日0(sun)..6(sat))を使えば, | |
第n×曜日 形式の指定も可能です. | |
・td セルオプション <td ここ> | |
-指定なしは""で. | |
-悪いがフォントカラーはスタイルシート("style='color:white'")で指定してくれ. | |
-同じ日に複数登録したりすると効かない事があるから注意. | |
・"予定" | |
-HTMLタグ使えます. | |
・祝日とあわせてMAXEVENT件までスケジュールを設定可能 | |
*** notice スケジュール登録 ***/ | |
function setSchedules(){ | |
//サンプル予定 | |
newSchedule( 2009, 3, 6, "", "飲み会<br>" ); | |
newSchedule( 2009, 3, 8, "", "<div align='center' style='background-color:#ff99cc;'><font color='#660000'>映画<\/font><\/div>" ); | |
newSchedule( 2009, 3, 24, "", "<span style='background-color:#00ffff; color:blue'>卒業式<\/span><br>" ); | |
newSchedule( 2009, 3, calDate(2009, 3, 3, 0), "", "<font color='green'>掃除当番<\/font>" ); //4月第3日曜日 | |
newSchedule( 2009, 3, 16, "bgcolor='#ff6699' style='color:white'", "ちーちゃん誕生日<br>" ); | |
} | |
//祝日いじるときはフォーマットは以下のような感じで | |
//case 月-1: | |
// Holiday( year, 月, 日, "祝日名<br>" ); | |
// Holiday( year, 月, calDate( 年, 月, 週, 曜日0(sun)..6(sat)), "祝日名<br>" ); | |
// break; | |
function setHolliday( year, month, len ){ | |
var i, tmp; | |
//振替休日,国民の休日計算用領域確保 | |
holDate = new Array(MAXEVENT); | |
hi = 0; | |
for(i=0; i<=len; i++){ | |
switch( month ){ | |
case 0: | |
Holiday( year, 1, 1, "元日<br>" ); | |
Holiday( year, 1, calDate(year, 1, 2, 1), "成人の日<br>" ); //1月第2月曜日 | |
break; | |
case 1: | |
Holiday( year, 2, 11, "建国記念の日<br>" ); | |
break; | |
case 2: | |
Holiday( year, 3, vernal(year), "春分の日<br>" ); | |
break; | |
case 3: | |
Holiday( year, 4, 29, "昭和の日<br>" ); | |
break; | |
case 4: | |
Holiday( year, 5, 3, "憲法記念日<br>" ); | |
Holiday( year, 5, 4, "みどりの日<br>" ); | |
Holiday( year, 5, 5, "こどもの日<br>" ); | |
break; | |
case 6: | |
Holiday( year, 7, calDate(year, 7, 3, 1), "海の日<br>" ); //7月第3月曜日 | |
break; | |
case 8: | |
Holiday( year, 9, calDate(year, 9, 3, 1), "敬老の日<br>" ); //9月第3月曜日 | |
Holiday( year, 9, autumn(year), "秋分の日<br>" ); | |
break; | |
case 9: | |
Holiday( year, 10, calDate(year, 10, 2, 1), "体育の日<br>" ); //10月第2月曜日 | |
break; | |
case 10: | |
Holiday( year, 11, 3, "文化の日<br>" ); | |
Holiday( year, 11, 23, "勤労感謝の日<br>" ); | |
break; | |
case 11: | |
Holiday( year, 12, 23, "天皇誕生日<br>" ); | |
break; | |
} | |
year = year + Math.floor((month+1)/12); | |
month = (month+1)%12; | |
} | |
for(i=0; i<hi; i++){ | |
if( holDate[i].getDay() == 0 ){ | |
tmp = moveDate(holDate[i],1); | |
i++; | |
while( i<hi && | |
tmp.getDate() == holDate[i].getDate() && | |
tmp.getMonth() == holDate[i].getMonth() && | |
tmp.getYear() == holDate[i].getYear() ){ | |
tmp = moveDate(tmp,1); | |
i++; | |
} | |
newEvent( tmp, HOLIDAY, "振替休日<br>" ); | |
i--; | |
} | |
} | |
for(i=1; i<hi; i++){ | |
tmp = moveDate(holDate[i-1], 2); | |
if( tmp.getDate() == holDate[i].getDate() && | |
tmp.getMonth() == holDate[i].getMonth() && | |
tmp.getYear() == holDate[i].getYear() ){ | |
tmp = tmp.getDay(); | |
if( tmp!=1 && tmp!=2 ){ | |
tmp = moveDate(holDate[i-1], 1); | |
newEvent( tmp, HOLIDAY, "国民の休日<br>" ); | |
} | |
} | |
} | |
} | |
//year年month月 第week day曜日の計算 | |
function calDate( year, month, week, day ){ | |
var tmp, day1; | |
tmp = new Date(year, month-1, 1); | |
day1 = tmp.getDay(); | |
tmp = 1 + day - day1 + week*7; | |
if( day - day1 >= 0 ) tmp = tmp - 7; | |
return tmp; | |
} | |
// 春分の日を求める(2000~2099) 確実である保証はないと思う | |
function vernal( year ){ | |
var tmp = Math.floor( 20.69115 + 0.242194 * (year - 2000) | |
- Math.floor((year - 2000)/4) ); | |
return tmp; | |
} | |
// 秋分の日を求める(2000~2099) 確実である保証はないと思う | |
function autumn( year ){ | |
var tmp = Math.floor( 23.09 + 0.242194 * (year - 2000) | |
- Math.floor((year - 2000)/4) ); | |
return tmp; | |
} | |
function newEvent( date, sel, name ){ | |
if( si >= MAXEVENT ) return; | |
sdlDate[si] = date; | |
sdlSel[si] = sel; | |
sdlName[si] = name; | |
si++; | |
} | |
function newSchedule( year, month, date, sel, name ){ | |
newEvent( new Date( year, month-1, date ), sel, name ); | |
} | |
function Holiday( year, month, date, name ){ | |
var i, tmp; | |
month--; | |
tmp = new Date( year, month, date ); | |
newEvent( tmp, HOLIDAY, name ); | |
//振替休日、国民の休日計算用データ登録 | |
if( hi >= MAXEVENT ) return; | |
//インサーションソート | |
for( i=hi-1; | |
i>=0 && holDate[i].getMonth() == month && holDate[i].getDate() > date; | |
i-- ){ | |
holDate[i+1] = holDate[i]; | |
} | |
holDate[i+1] = tmp; | |
hi++; | |
} | |
//dateを基準にdis日動かした日を返す | |
function moveDate( date, dis ){ | |
var d, m, y; | |
d = date.getDate(); | |
m = date.getMonth(); | |
y = date.getFullYear(); | |
if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000~) | |
monthTable[1] = 29; | |
else monthTable[1] = 28; | |
d = d + dis; | |
while( d > monthTable[m]){ | |
d = d - monthTable[m]; | |
m++; | |
if( m > 11 ){ | |
m=0; | |
y++; | |
if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000~) | |
monthTable[1] = 29; | |
else monthTable[1] = 28; | |
} | |
} | |
while( d < 0 ){ | |
m--; | |
if( m < 0 ){ | |
m=11; | |
y--; | |
if ( ((y%4)==0 && (y%100)!=0) || (y%400)==0 ) //うるうの判定(2000~) | |
monthTable[1] = 29; | |
else monthTable[1] = 28; | |
} | |
d = d + monthTable[m]; | |
} | |
return (new Date(y,m,d)); | |
} | |
//Main関数 | |
function showCalendar( argDate ){ | |
var i, j, k, tmpDate; | |
tmp = argDate.getMonth() + 1; | |
document.formSdlCal.dateInput.value = argDate.getFullYear() + "/" + tmp + "/" + argDate.getDate(); | |
//スケジュール登録用領域確保 | |
sdlDate = new Array(MAXEVENT); | |
sdlSel = new Array(MAXEVENT); | |
sdlName = new Array(MAXEVENT); | |
si = 0; | |
//覚えとく | |
gBaseDate = argDate; | |
//argDateの週の日曜日から表示する | |
tmpDate = moveDate( argDate, -argDate.getDay() ); | |
//"今日"を記憶 | |
toDate = new Date(); | |
//表示する可能性のある (SHOWWEEK/4)+2ヶ月先まで祝日を登録 | |
setHolliday( tmpDate.getFullYear(), tmpDate.getMonth(), Math.floor(SHOWWEEK/4)+2 ); | |
//スケジュールを登録 | |
setSchedules(); | |
//描画用コード開始 | |
docubuf = "<table border='3' cellspacing='0' " + DEFAULT + ">"; | |
//曜日 | |
docubuf += "<tr>"; | |
for(i=0; i<7; i++){ | |
docubuf += "<td align='center' "; | |
if(i==0) docubuf += SUN + "><strong>" + weekTable[i] + "<\/strong>"; | |
else if(i==6) docubuf += SAT + "><strong>" + weekTable[i] + "<\/strong>"; | |
else docubuf += MON + "><strong>" + weekTable[i] + "<\/strong>"; | |
docubuf += "<\/td>"; | |
} | |
docubuf += "<\/tr>"; | |
//日付 | |
for(i=0; i<SHOWWEEK; i++){ | |
docubuf += "<tr valign='top' height='" + HEIGHT + "'>"; | |
for(j=0; j<7; j++){ | |
docubuf += "<td width='" + WIDTH + "' "; | |
//セル色は最後に登録したの優先. | |
for(k=si-1; k>=0; k--) | |
if( sdlDate[k].getDate() == tmpDate.getDate() && | |
sdlDate[k].getMonth() == tmpDate.getMonth() && | |
sdlDate[k].getYear() == tmpDate.getYear() && | |
sdlSel[k] != "" | |
) | |
break; | |
//セル色設定 | |
if( tmpDate.getDate() == toDate.getDate() && | |
tmpDate.getMonth() == toDate.getMonth() ) | |
docubuf += TODAY + ">"; | |
//別に1年前の今日に色付けてもいいか | |
else if( k >= 0 ) docubuf += sdlSel[k] + ">"; | |
else if(j==0) docubuf += HOLIDAY + ">"; | |
else if(j==6) docubuf += SATURDAY + ">"; | |
else docubuf += USUALDAY + ">"; | |
//日付表示 | |
docubuf += "<strong>"; | |
//年初めは年から表示 | |
if( tmpDate.getDate()==1 && tmpDate.getMonth()==0 ) | |
docubuf += tmpDate.getFullYear() + "/"; | |
//最初と月初めは月から表示 | |
if( tmpDate.getDate()==1 || (i==0 && j==0) ) | |
docubuf += tmpDate.getMonth()+1 + "/"; | |
//普通は日だけ表示 | |
docubuf += tmpDate.getDate() + "<\/strong><br>"; | |
//スケジュール埋め込み.複数あったら全部.登録順. | |
for(k=0; k<si; k++) | |
if( sdlDate[k].getDate() == tmpDate.getDate() | |
&& sdlDate[k].getMonth() == tmpDate.getMonth() | |
&& sdlDate[k].getYear() == tmpDate.getYear() | |
) | |
docubuf += sdlName[k]; | |
//日を進める | |
tmpDate = moveDate( tmpDate, 1 ); | |
docubuf += "<\/td>"; | |
} | |
docubuf += "<\/tr>"; | |
} | |
docubuf += "<\/table>"; | |
divSdlCal.innerHTML = docubuf; | |
} | |
// --> | |
</script> | |
</head> | |
<body bgcolor="#ffffff"> | |
<table width="80%" align="center"><tr><td> | |
<font size="+1"><strong>JavaScript カレンダー型スケジュール帳</strong></font><br> | |
<br> | |
</td></tr></table> | |
<div align="center"> | |
<!-- ここからカレンダー --> | |
<div id="divSdlCal"></div> | |
<form name="formSdlCal" action="javascript:showCalendar(new Date(document.formSdlCal.dateInput.value));"> | |
<input type="button" value="<<" onclick="showCalendar(moveDate(gBaseDate,-7*(SHOWWEEK-1)))"> | |
<input type="button" value=" < " onclick="showCalendar(moveDate(gBaseDate,-7))"> | |
<input type="button" value="今日" onclick="showCalendar(new Date())"> | |
<input type="button" value=" > " onclick="showCalendar(moveDate(gBaseDate,7))"> | |
<input type="button" value=">>" onclick="showCalendar(moveDate(gBaseDate,7*(SHOWWEEK-1)))"> | |
<br> | |
date | |
<input type="text" name="dateInput" value=""> | |
<input type="button" value="表示" onclick="showCalendar(new Date(document.formSdlCal.dateInput.value))"> | |
</form> | |
<script type="text/javascript"><!-- | |
// showCalendar(dateクラス 引数の例) | |
// 今週から表示 new Date() | |
// 2004/1/24の週から表示 new Date(2004,0,24) 月は1引く事. | |
// 7日前の週から表示 moveDate(new Date(), -7) | |
// 今週が最後になる moveDate(new Date(), -7*(SHOWWEEK-1)) | |
// showCalendar(dateクラス 引数の例) | |
showCalendar(new Date(2009,2,1)); ////スケジュール表示デモ用 | |
//showCalendar(new Date()); ////起動時にこれで表示(1個上のかわりにこっちを使ってね) | |
// --></script> |
このページはあなたのWikiのトップページです。自由に編集してください。
メニューの【編集】をクリックしていただき編集ができます。
管理者ログインは右上メニュー【ログイン】をクリックしていただき編集ができます。
※このページの内容はすべて削除しても問題ありません。
エディターの基本的な使い方
- 文字を斜体文にできます
- 文字を下線を引く事ができます
- 文字を打ち消し文にする事ができます
- 文字を添え字にする事ができます
- 文字を上付き文字にする事ができます
コメント
最新を表示する
NG表示方式
NGID一覧