本日  昨日
 
12/03(Sat) 18:31

o 万年カレンダー
(16.12.28)2016(平成28)年施行の「祝日法」の改正、8/11「山の日」に対応しました。
(08.04.23)2007(平成19)年施行の「祝日法」の改正で抜けていた、(1)国民の祝日が日曜日と重なる場合その直後の「国民の祝日でない日」を振替休日とする(5/3や5/4が日曜日と重なった場合には5/6が振替休日)、(2)国民の祝日に挟まれた平日を国民の休日とする(敬老の日と秋分の日)、に対応しました。
(07.04.29)2007(平成19)年施行の「祝日法」の改正、4/29「みどりの日」→「昭和の日」、5/4「国民の祝日」→「みどりの日」に対応しました。
(04.02.21)「敬老の日」が2003(平成15)年から9月第3月曜日になる「祝日法」の改正に未対応だったのを対応するように修正。
(03.05.03)「海の日」が2003(平成15)年から7月第3月曜日になる「祝日法」の改正に対応。また振替休日が祝日の場合に振替休日を表示してしまうバグを修正しました
(01.12.31)NetScapeで12月が表示されない不具合を修正しました
(01.12.31)特別日を今日からx日後に設定する方法を追加しました
(01.08.02)koyomi(yy+"/"+(mm-n));の(mm-n)が負の場合にエラーとなる不具合を修正しました
(99.11.05)2000年以降の成人の日/体育の日(第2月曜日)対応、振替休日の自動計算
(99.07.24)複数月同時表示へ機能アップ、表示カラー変更
(99.05.09)2000年対応ルーチンの追加


このカレンダーを応用した、カレンダー付Web日記帳(Personal-Diary)あっぽー庵さん自作CGI配布コーナで入手できます。以下はあっぽー庵さんの説明の引用です。
日付、ログの編集、過去ログ自動生成など、WebDiaryとして考えうるほぼ全ての機能を満載しました。カレンダーを表示させ、見たい日にちを選択するモードと、月ごとにまとめて表示するモードの2つのどちらかを選択することができるのもこのスクリプトの特長です。また、日付を選択して日記を書くことができます。
1ヶ月(今月)表示

3ヶ月(複数月)表示


スポンサーリンク

スクリプトのコピー&貼りつけ
下のスクリプトをコピーし、<HEAD>と</HEAD>のなかに貼りつけます。

  1. ハッピーマンディ、振替休日の自動計算機能追加にともないkyuDaysの配列内位置と休日月日は固定です。この行は変更しないで下さい。
  2. 特別な日(例えばメーデーや誕生日など)を追加したい場合は、tokuDays に "0501","1225" のように文字列で追加します。
  3. 表示色の優先度は 特別日祭日になります。
  4. 特別日をクリックすると挨拶などを書いた新ページをオープンすることもできます。(最下段の「改造」を参照)
  5. 年を表示したくない場合は、doc+=year + "年";を// doc+=year + "年";とコメント行にするか、この部分を削除します。
  6. テーブル背景色の変更---年月<TR bgcolor=#0000a0>、曜日<TR bgcolor=#f7ffa0>、日<TR bgcolor=#ddffdd>(2ヶ所あります)、本日<TR bgcolor=cyan>の色指定を変更します。あなたの好きな背景色に変更出来ます。
【注意】広告バナーが自動的に表示されるプロバイダー(Geocitiesやfreewebなど)をご利用のユーザでスクリプトエラーが起こる時は下記の対処をして下さい。広告の挿入が、最初に見つけた<BODY>タグの直後にされるためスクリプトエラーになります。
  • 広告バナーの表示・非表示選択ができるユーザ。Geocitiesの場合はジオガイドマネージャーの「ジオガイドの調整」で、スクリプトを設置したファイルのジオガイドを表示しない設定に変更します。
  • 広告バナーの表示・非表示選択ができないユーザ。スクリプト本体を<HEAD>部ではなく<BODY>部(BODYタグの次行)に移動してください。

    <script language="JavaScript"> <!-- //万年暦 by「菊池さん」 <http://kikuchisan.net/> nDate = new Date(); thisDay = nDate.getDate(); thisMonth = nDate.getMonth(); function koyomi(mymonth) { var str = new Array(); str = mymonth.split("/"); while( str[1] < 1 ) { str[1] = str[1]*1 + 12; str[0] = str[0]*1 - 1; } while( str[1] > 12 ) { str[1] = str[1]*1 - 12; str[0] = str[0]*1 + 1; } myday = new Date(); myday.setDate(1); myday.setMonth(str[1]-1); myday.setYear(str[0]); monthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); kyuDays = new Array("0101","0115","0211","0321","0429","0503","0504","0505" ,"0720","0915","0923","1010","1103","1123","1223"); //休日設定(変更出来ません) tokuDays = new Array("0518"); //特別日設定 year = myday.getYear(); if (year < 2000) year = year + 1900; month = myday.getMonth()+1; if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { monthDays[1] = 29; } // うるう年計算 kyuDays[3] = "03" + Math.floor(20.8431 + 0.242194 * (year - 1980) - Math.floor((year - 1980)/4)); // 春分の日を求める(1980-2099まで) kyuDays[10] = "09" + Math.floor(23.2488 + 0.242194 * (year - 1980) - Math.floor((year - 1980)/4)); // 秋分の日を求める(1980-2099まで) nDays = monthDays[myday.getMonth()]; firstDay = myday; firstDay.setDate(1); startDay = firstDay.getDay(); // 2000年以降の成人の日/体育の日(第2月曜日)の計算 if (year >= 2000 &&(month == 1 || month == 10)) { if (startDay <= 1) happyMon = 7 + (2 - startDay); else happyMon = 14 - (startDay - 2); if (happyMon < 10) happyMon = "0" + happyMon; if (month == 1) kyuDays[1] = "01" + happyMon; else kyuDays[11] = "10" + happyMon; } // 2003年以降の海の日/敬老の日(第3月曜日)の計算 if (year >= 2003 && (month == 7 || month == 9)) { if (startDay <= 1) happyMon = 14 + (2 - startDay); else happyMon = 21 - (startDay - 2); if (happyMon < 10) happyMon = "0" + happyMon; if (month == 7) kyuDays[8] = "07" + happyMon; else kyuDays[9] = "09" + happyMon; } // 2007年以降は5/3,4のいずれかが日曜のときは5/6は振替休日 // (5/5が日曜のケースは「振替休日の自動計算」で計算) if (year >= 2007 && month == 5) { for (i = 3; i <= 4; i++) { zday = (year + parseInt(year/4) - parseInt(year/100) + parseInt(year/400) + parseInt((13*month + 8)/5) + i ) % 7; if (zday == 0) { kyuDays[kyuDays.length] = "0506"; } } } // 2007年以降は前後が祝日の場合の平日は国民の休日となる(敬老の日と秋分の日) // 2150年までは秋分の日が必ず水曜日になることから判定 if (year >= 2007 && month == 9) { hday = kyuDays[10].substring(2,4)*1; zday = (year + parseInt(year/4) - parseInt(year/100) + parseInt(year/400) + parseInt((13*month + 8)/5) + hday) % 7; if (zday == 3) { hday = hday - 1; kyuDays[kyuDays.length] = "09" + hday; } } // 2016年以降の山の日の設定 if (year >= 2016 && month == 8) { kyuDays[kyuDays.length] = "0811"; } skip = 0; for (i = 0; i < kyuDays.length; i++) { // 振替休日の自動計算 hmon = kyuDays[i].substring(0,2); if (hmon == month) { hday = kyuDays[i].substring(2,4)*1; if (hmon <= 2) { zyear = year - 1; zmon = parseInt(hmon) + 12; } else { zyear = year; zmon = hmon; } zday = (zyear + parseInt(zyear/4) - parseInt(zyear/100) + parseInt(zyear/400) + parseInt((13*zmon + 8)/5) + hday ) % 7; if (zday == 0) { hday = hday + 1; if (hday < 10) { hday = "0" + hday;} for (i = 0; i < kyuDays.length; i++) { //振替休日が祝日の場合スキップ if (kyuDays[i] == (hmon + hday)) { skip = 1; } } if (skip == 0) { kyuDays[kyuDays.length] = hmon + hday; } } } } doc ="<CENTER><TABLE bgcolor=white border=0 bordercolor=white cellpadding=2>"; doc+="<TR bgcolor=#0000a0><TH COLSPAN=7><FONT color=white>"; // doc+=year + "年 "; doc+=month + "月</FONT></TH></TR>"; doc+="<TR bgcolor=#f7ffa0 align=center><TD><FONT color=red>日</FONT></TD>"; doc+="<TD><FONT color=black>月</FONT></TD><TD><FONT color=black>火</FONT></TD>"; doc+="<TD><FONT color=black>水</FONT></TD><TD><FONT color=black>木</FONT></TD>"; doc+="<TD><FONT color=black>金</FONT></TD><TD><FONT color=blue>土</FONT></TD></TR>"; doc+="<TR bgcolor=#ddffdd>"; column = 0; for (i=0; i<startDay; i++) { doc+="<TD> </TD>"; column++; } for (i=1; i<=nDays; i++) { if (i==thisDay && myday.getMonth()==thisMonth) { //本日の背景色変更 doc+="<TD ALIGN=center bgcolor=cyan>"; } else { doc+="<TD ALIGN=center>"; } weekDay = myday; weekDay.setDate(i); if (weekDay.getDay() == 0) doc+="<FONT COLOR=red>"; else if (weekDay.getDay() == 6) doc+="<FONT COLOR=blue>"; else doc+="<FONT COLOR=black>"; for (j=0; j<kyuDays.length; j++) //休日判定 { if (myday.getMonth()+1 == kyuDays[j].substring(0,2) && i == kyuDays[j].substring(2,4)*1) doc+="<FONT COLOR=red>"; } for (j=0; j<tokuDays.length; j++) //特別日判定 { if (myday.getMonth()+1 == tokuDays[j].substring(0,2) && i == tokuDays[j].substring(2,4)*1) doc+="<a href='" + tokuDays[j].substring(0,4) + ".html'><FONT COLOR=magenta>"; } doc+=i; doc+="</FONT></a></TD>" column++; if (column == 7 && i != nDays) { doc+="</TR><TR bgcolor=#ddffdd>"; column = 0; } } for (i=0; column<7; i++){ doc+="<TD> </TD>"; column++; } doc+="</TR></TABLE></CENTER>"; document.write(doc); } // --> </script>

    カレンダーを表示したい場所に下の文を記述します。
    1ヶ月(今月)表示
    <script language="JavaScript"> <!-- dt=new Date(); yy=dt.getYear(); if (yy < 2000) yy = yy + 1900; mm=dt.getMonth()+1; document.write("<table bgcolor=white border=1 bordercolor=silver cellspacing=0>"); document.write("<tr><td valign=top>"); koyomi(yy+"/"+mm); document.write("</td></tr></table>"); //--> </script>

    3ヶ月(複数月)表示
    月数を減らしたり、増やしたい時は

    document.write("</td><td valign=top>");
    koyomi(yy+"/"+(mm+1));
    を削除したり追加します。mmは今月、mm+1は来月、mm+2は再来月を表示します。
    同様にmm-1は前月、mm-2は前々月になります。
    <script language="JavaScript"> <!-- dt=new Date(); yy=dt.getYear(); if (yy < 2000) yy = yy + 1900; mm=dt.getMonth()+1; document.write("<table bgcolor=white border=1 bordercolor=silver cellspacing=0>"); document.write("<tr><td valign=top>"); koyomi(yy+"/"+(mm-1)); document.write("</td><td valign=top>"); koyomi(yy+"/"+mm); document.write("</td><td valign=top>"); koyomi(yy+"/"+(mm+1)); document.write("</td></tr></table>"); //--> </script>

    特別日をクリックすると新しいページをオープンするようにするには。(上のスクリプトにはすでに組み込まれています)

    1. 下の赤字部分を追加します
      if (myday.getMonth()+1 == tokuDays[j].substring(0,2) && i == tokuDays[j].substring(2,4)*1) doc+="<a href='" + tokuDays[j].substring(0,4) + ".html'><FONT COLOR=orange>";
      }
      doc+=i;
      doc+="</FONT></a></TD>"
    2. mmdd.htmlというファイルを用意し、同じフォルダに置きます。mmddは特別日の月日です。例えば3月4日だと0304.htmlになります。

    <応用>特別日を今日からx日後に設定するには(上の表示サンプルでは3日後、10日後が組み込まれています)
    1. tokuDays = new Array("0518"); //特別日設定
      の行を以下のソースと置き換えます。"0518"を設定しないときは「,"0518"」を削除してください。
    2. 特別日をさらに追加したいときは
      (1)tokuMon0、tokuDay0、tokuDate0 の変数名を tokuMonn、tokuDayn、tokuDaten のように数字を変更して追加します。
      (2)tokuDays = new Array(tokuDate0,tokuDate1,tokuDaten,"0518");の中にtokuDatenを追加します
    3. 特別日にはリンクが組み込まれていますので、上の「特別日をクリックすると新しいページをオープンするようにするには」の赤字部分を削除してリンクを外します。
      特別日の日付をブリンクさせたいときは、この Aタグを BLINKタグに置き換えます。(NetScapeで有効)
    //特別日を今日からx日後に設定 nDateYear = nDate.getYear(); nDateMon = nDate.getMonth()+1; nDateDay = nDate.getDate() + 3; //今日から3日後を指定 tokuDate = new Date(nDateYear + "/" + nDateMon + "/" + nDateDay); tokuMon0 = tokuDate.getMonth()+1; tokuDay0 = tokuDate.getDate(); tokuMon0 = ((tokuMon0 < 10) ? "0" : "") + tokuMon0; tokuDay0 = ((tokuDay0 < 10) ? "0" : "") + tokuDay0; tokuDate0 = tokuMon0 + tokuDay0; nDateDay = nDate.getDate() + 10; //今日から10日後を指定 tokuDate = new Date(nDateYear + "/" + nDateMon + "/" + nDateDay); tokuMon1 = tokuDate.getMonth()+1; tokuDay1 = tokuDate.getDate(); tokuMon1 = ((tokuMon1 < 10) ? "0" : "") + tokuMon1; tokuDay1 = ((tokuDay1 < 10) ? "0" : "") + tokuDay1; tokuDate1 = tokuMon1 + tokuDay1; tokuDays = new Array(tokuDate0,tokuDate1,"0518"); //特別日設定

  •  
     
    ©1997- Kikuchisan's workshop All rights reserved //