<!DOCTYPE HTML> <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=shift_jis"> <TITLE>ばいおりん の 慣性系相対性理論</TITLE> <STYLE TYPE="text/css"> body {line-height : 160% ; } </STYLE> <SCRIPT type="text/JavaScript"> <!-- var kabe_sun = "pink"; var kabe_mon = "\EEEEEE"; var kabe_tue = "\EEEEEE"; var kabe_wed = "\EEEEEE"; var kabe_thu = "\EEEEEE"; var kabe_fri = "\EEEEEE"; var kabe_sat = "lightblue"; var firstAltMsg = "&nbsp"; var firstAltYMD = "&nbsp"; //行事テーブル(フラグ(1:祝日 2:記念日など),月,日,メッセージ) var gyouji_tbl = new Array( 1, 1, 1, "元旦", 1, 1, 0, "成人の日", 1, 2, 11, "建国記念の日", 1, 4, 29, "みどりの日", 1, 5, 3, "憲法記念日", 1, 5, 4, "国民の休日", 1, 5, 5, "こどもの日", 1, 7, 0, "海の日", 1, 9, 0, "敬老の日", 1, 10, 0, "体育の日", 1, 11, 3, "文化の日", 1, 11, 23, "勤労感謝の日", 1, 12, 23, "天皇誕生日", 1, 3, 20, "春分の日", 2, 12, 24, "クリスマスイブ" ); var kokuminLastCnt = gyouji_tbl.length / 4; function carenda(num){ var now = new Date(); var year; var month; var date; var dValue = document.getElementById("dValue"); switch(parseInt(num)){ case 0: year = now.getFullYear(); month = now.getMonth()+1; date = now.getDate(); break; case 1: var backMDate = new Date(parseInt(dValue.innerHTML) - 24*60*60*1000*1); if(backMDate.getMonth() == now.getMonth() && backMDate.getFullYear() == now.getFullYear()){ year = now.getFullYear(); month = now.getMonth()+1; date = now.getDate(); }else{ year = backMDate.getFullYear(); month = backMDate.getMonth() + 1; date = -1; } break; case 2: var nextMDate = new Date(parseInt(dValue.innerHTML) + 24*60*60*1000*31); if(nextMDate.getMonth() == now.getMonth() && nextMDate.getFullYear() == now.getFullYear()){ year = now.getFullYear(); month = now.getMonth()+1; date = now.getDate(); }else{ year = nextMDate.getFullYear(); month = nextMDate.getMonth() + 1; date = -1; } break; } dValue.innerHTML = (new Date(year, month-1, 1)).getTime(); var last_date = new Array(31,28,31,30,31,30,31,31,30,31,30,31); var editMsg; if(month==2){ if(year%4==0){ if((year%100==0) && (year%400!=0)){ }else{ last_date[1] = 29; } } } editMsg = ""; editMsg += "<TABLE border=0 cellspacing=3><TR><TD colspan='7' align='center'><B><U><FONT size='-1'>" + year + "年" + month + "月</FONT></B></U></TD></TR>\n"; editMsg += "<TR>" + defTD("日","red",kabe_sun) + defTD("月","black",kabe_mon) + defTD("火","black",kabe_tue) + defTD("水","black",kabe_wed) + defTD("木","black",kabe_thu) + defTD("金","black",kabe_fri) + defTD("土","blue",kabe_sat) + "</TR>\n"; editMsg += "<TR>"; for(dayIndex=0; dayIndex<(new Date(year,month-1,1)).getDay(); dayIndex++){ editMsg += defTD("&nbsp;","white","white"); } //行事テーブル(祝日)の再設定 //成人の日 gyouji_tbl[1*4+2] = getSyukujituDate(year, 1, 2); //海の日 gyouji_tbl[7*4+2] = getSyukujituDate(year, 7, 3); //敬老の日 gyouji_tbl[8*4+2] = getSyukujituDate(year, 9, 3); //体育の日 gyouji_tbl[9*4+2] = getSyukujituDate(year, 10, 2); //みどりの日4/29→昭和の日 国民の休日5/4→みどりの日 if(year<=2006){ gyouji_tbl[3*4+3] = "みどりの日"; gyouji_tbl[5*4+3] = "国民の休日"; } else { gyouji_tbl[3*4+3] = "昭和の日"; gyouji_tbl[5*4+3] = "みどりの日"; } //当日と行事が重なる場合の初期設定 if(date != -1){ firstAltMsg = "&nbsp"; firstAltYMD = year + "/" + month + "/" + date; for(var j=0; j<kokuminLastCnt; j++){ if(gyouji_tbl[j*4+1] == month && gyouji_tbl[j*4+2] == date){ firstAltMsg += gyouji_tbl[j*4+3] + "&nbsp"; } } } for(i=1; i<=last_date[month-1]; i++){ if(i!=1 && dayIndex == 0){ editMsg += "<TR>"; } var kabeColor; var fontColor; var altYMD = year + "/" + month + "/" + i; var altMsg = "&nbsp"; //曜日別基本設定 switch(dayIndex){ case 0: fontColor = "red"; kabeColor = kabe_sun; break; case 1: fontColor = "\AAAAAA"; kabeColor = kabe_mon; break; case 2: fontColor = "\AAAAAA"; kabeColor = kabe_tue; break; case 3: fontColor = "\AAAAAA"; kabeColor = kabe_wed; break; case 4: fontColor = "\AAAAAA"; kabeColor = kabe_thu; break; case 5: fontColor = "\AAAAAA"; kabeColor = kabe_fri; break; case 6: fontColor = "blue"; kabeColor = kabe_sat; break; } //行事の時 for(var j=0; j<kokuminLastCnt; j++){ if(gyouji_tbl[j*4+1] == month && gyouji_tbl[j*4+2] == i){ //祝日 if(gyouji_tbl[j*4] == 1){ fontColor = "red"; }else{ kabeColor = "lightgreen"; } altMsg += gyouji_tbl[j*4+3] + "&nbsp"; } } //当日 if(i==date){ fontColor = "black"; } editMsg += defTD2(i,fontColor,kabeColor,altYMD,altMsg); if(dayIndex == 6){ editMsg += "</TR>\n"; } dayIndex++; dayIndex%=7; } if(dayIndex!=7){ editMsg += "</TR>\n"; } editMsg += "</TABLE>\n"; document.getElementById("carenda").innerHTML = editMsg; } function defTD(str, iro, kabe){ return "<TD style='cursor:default' align='center' bgcolor='" + kabe + "'><B><FONT size='-2' color='" + iro + "'>" + str + "</FONT></B></TD>"; } function defTD2(str, iro, kabe, altYMD,altMsg){ return "<TD style='cursor:default' align='center' bgcolor='" + kabe + "' onMouseOver=setAltMsg('" + altYMD + "','" + altMsg + "') onMouseOut=setAltMsg('" + firstAltYMD + "','" + firstAltMsg + "')><B><FONT size='-2' color='" + iro + "'>" + str + "</FONT></B></TD>"; } function setAltMsg(altYMD, altMsg){ var editAltMsg = ""; editAltMsg += "<FONT size = '-1'>" + altYMD + "</FONT>"; editAltMsg += "<BR>"; editAltMsg += "<FONT size = '-1'>" + altMsg + "</FONT>"; document.getElementById("altMsg").innerHTML = editAltMsg; } //祝日の日にち取得(年、月、第?週の月曜日) function getSyukujituDate(year, month, syuu){ var syuuCnt = 0; for(var i=1; i<=31; i++){ var date = (new Date(year, month-1, i)).getDay(); if((new Date(year, month-1, i)).getDay() == 1){ syuuCnt++; } if(syuuCnt == syuu){ return i; } } } //--> </SCRIPT> </HEAD> <BODY LANG="ja-JP" DIR="LTR"><br> <center><a name="top"><font size="5" color="ForestGreen">曜日計算</font></a></center> <img src="jfiles/yadai.gif"> <a href="tbtenmotb.html"><b><font size="3" color="#808080">天文学と物理学 へ戻る</font></b></a><br> <img src="jfiles/yadai.gif"> <a href="dexin-2.html"><b><font size="3" color="#808080">ばいおりんの日常的物理学文集 へ戻る</font></b></a><br>                                               <font color="#808080">2013.01.31</font> <hr> <UL> <BODY> <DIV id="dValue" style="position:absolute; visibility:hidden"></DIV> <TABLE border="0" cellspacing="0"> <TR> <TD align="left"><DIV style="cursor:pointer" onClick="carenda(1)"><FONT color="pink" size="-1">前月</FONT></DIV></TD> <TD align="center"><FONT color="gray"><B>カレンダー</B></FONT></TD> <TD align="right"><DIV style="cursor:pointer" onClick="carenda(2)"><FONT color="pink" size="-1">翌月</FONT></DIV></TD> </TR> <TR><TD colspan="3"> <TABLE border="2" cellspacing="1" bordercolor="pink"> <TR><TD> <DIV id="carenda"> <SCRIPT type="text/JavaScript"> <!-- carenda(0); //--> </SCRIPT> </DIV> </TD></TR> <TR> <TD id="altMsg"> <SCRIPT type="text/JavaScript"> <!-- setAltMsg(firstAltYMD, firstAltMsg); //--> </SCRIPT> </TD> </TR> </TABLE> </TD></TR> </TABLE> </UL>   JavaScript sample ( http://www.wind.sannet.ne.jp/alfix/javascript/index.html ) さんより、 サンプルソースをいただきました。<br> <FORM> <DIV align="center"><BR> <INPUT type=BUTTON VALUE="小窓で電卓を開く" onclick="window.open('dentaku.html' , ' ', 'left=800 , width=590,height=270');"> </DIV> </FORM> <br>   上のカレンダーを2013年3月にしてください。 そして、 3月20日の春分の日に注目してください。 20 とその両隣りの数とその上下の数、 5つをぜんぶ足すと 100 になります。 病院に行くなら、 この5つの日は避けるべきです。 20日の両隣りは急性疾患の患者さんが多く、 20日の1週間前後は慢性疾患の定期通院患者さんが多くて、 待ち時間が長くなるからです。 リゾート温泉に行ってロッカーの鍵を渡されるときも、 なるべく上下左右が開いている所を選んでもらっているじゃないですか。<br><br>   上のカレンダーをいろんな月にしてみてください。 第1曜日が4日以上である曜日が第5曜日まである月は絶対にありません。<br><br><br>   さて、 西暦の年、月、日 からその日が何曜日であるかを求めるのに、 「 ツェラーの公式 」 というのがあります。<br>   求めたい日の年の上2桁 ( 例えば2013年 ならば 20 ) を <IMG SRC="jfiles/j.gif"> 、 年の下2桁 ( 例えば2013年 ならば 13 ) を <IMG SRC="jfiles/k.gif"> 、 月 を <IMG SRC="jfiles/m.gif"> 、 日 を <IMG SRC="jfiles/q.gif"> とします。 ただし、 求めたい日の月が 1月、2月 の場合は、 それぞれ前年の 13月、14月 とします。 ( 例えば2013年2月14日ならば 2012年14月14日 )。 そして、 次の <IMG SRC="jfiles/xdai.gif"> を求めます。<br><br>      <IMG SRC="ufiles/carenda_01.gif"><br><br>   <IMG SRC="jfiles/xdai.gif"> を 7 で割った余りが、 0 なら土曜日、 1 なら日曜日、 2 なら月曜日、 3 なら火曜日、 4 なら水曜日、 5 なら木曜日、 6 なら金曜日です。<br><br>   では、 今年のクリスマスイブ <sub><IMG SRC="ufiles/carenda_02.gif"></sub> が何曜日になるか求めてみましょう。<br>      <IMG SRC="ufiles/carenda_03.gif"><br> したがって、 火曜日になることがわかりました。<br><br>   続いて、 現在のグレゴリオ暦が始まった <sub><IMG SRC="ufiles/carenda_04.gif"></sub> が何曜日だったのか求めてみましょう。<br>      <IMG SRC="ufiles/carenda_05.gif"><br> したがって、 金曜日であったことがわかりました。<br><br><br>   「 ツェラーの公式 」 の導き方はあらかね次のようなものです。 現在のグレゴリオ暦が西暦0年の3月1日 ( 水 ) から開始されていたと仮定して、 その日から何日目になっているのかを求めます。 ( フェアフィールドの公式の原理 ) また、 西暦年を上下2桁に分けるのは、 フェアフィールドの公式を簡単にするためのテクニックです。 フェアフィールドの公式の導き方に関しましては、 川崎医療福祉大学 医療情報学科 ( http://www.kawasaki-m.ac.jp/mw/hinfo/index.php ) の中の 連載自然の不思議・数理の不思議 の中の 暦の数理.pdf がわかりやすいと思います。 また、 フェアフィールドの公式を簡単にする方法については Wikipedia がお勧めです。 なお、 BASICの曜日計算のプログラムでは、 大矢建正さんのホームページ ( http://www.h6.dion.ne.jp/~ooya/ ) で紹介されているものが素晴らしいと思います。 また、 JavaScript には曜日取得関数が標準装備されていますので、 簡単なプログラムになります。<br> <FORM> <DIV align="center"><BR> <INPUT type=BUTTON VALUE="小窓で曜日計算君を開く" onclick="window.open('youbi.html' , ' ', 'right=000 , width=550,height=200');"><br><br> </DIV> </FORM>   西暦年が4で割り切れる年は閏年といって1年が366日あります。 閏年には夏期オリンピックが開かれます。 2月は元々他の月と違って短く作られており、 閏年のときには1日増えます。 どうしてそうなったのでしょうか? それは、 昔は1年の始まりが生命の息吹が始まる3月であったため ( 昔はマーチは3月とは言われませんでした。) と、 ローマ帝国初代皇帝アウグスツス ( 8月がオーガストなのは彼の名前に由来します。) の我儘のせいです。 3月は31日、 4月は30日、 5月は31日、 ・ ・ ・ ・ と交互にし、 年末月の2月を閏年でない年は29日にして、 紀元前45年にユリウス暦が始まったのですが、 その後紀元前8年に皇帝アウグスツスが自分の誕生月という理由で8月を31日にして、 さすがに3か月続けて31日はないでしょうということで、 9月と11月の1日をそれぞれ10月と12月に渡し、 年末月の2月を閏年でない年は28日にしてしまったのです。<br><br> <FORM> <DIV align="center"><BR> <INPUT type=BUTTON VALUE="小窓でただ今の時刻を表示する" onclick="window.open('tadaima.html' , ' ', 'right=300 , width=480,height=140');"> </DIV> </FORM> <br><br> </BODY> </HTML>