前提・実現したいこと
15年前に作成したHP用カレンダー型予定表に来年の予定を入力し表示させると曜日が正しく出なくなりました。
(作成から今年2019年12月までは正しく出力されてきた。)
プログラムを調べても原因がつかめず、困っています。
発生している問題・エラーメッセージ
例えば、2020年1月1日は 正しくは金曜日ですが、出力は 月曜日と3日後の曜日が表示されます。 以降、パソコンの日付を変更しても誤った(常に3日後の)曜日が出ます。 ### 該当のソースコード >>> javascript <<< Now=new Date(); //今日の年月日曜日を取得 with(Now) { YY = getFullYear(); MM = getMonth()+1; DD = getDate(); WW = getDay(); } Yoobi=new Array("日","月","火","水","木","金","土"); function Nissu(a, b) { //指定月の日数を取得する関数 if(b==2) { if((a % 4)==0) { if((a % 100==0) && (a % 400!=0)) return 28; else return 29; } else return 28; } else if((b==4) || (b==6) || (b==9) || (b==11)) return 30; else return 31; } //データ文字列の色付け str1=new Array("健康教室","子供クラス","一般クラス","(休み)","休み","有り","呼吸法"); color1=new Array( "blue", "tomato", "darkred", "red", "red", "red", "green"); str2=new Array(); for(i=0; i< str1.length; i++) { str2[i]=str1[i].fontcolor(color1[i]); } str3=new Array(); for(i=0; i< str1.length; i++) { str3[i]=new RegExp(str1[i],"g"); } Txt=""; //ソースの初期化 function Calendar(Tuki,Nen) { //カレンダーを作成する関数 First=0; Txt+="<DIV align=center><TABLE border=0><TR><TD WIDTH=170></TD><TD>"; Txt+="<DIV align=center><TABLE border=1 cellpadding=3 bordercolor=#000099 bgcolor=#eeeeff>"; Txt+="<TR><TD nowrap><FONT size=5 color=#000099><i>"+Nen+"年"+" "+Tuki+"月</i></FONT></TD></TR></TABLE>"; //該当月タイトル Txt+="</TD><TD WIDTH=210 align=right valign=bottom><A HREF='javascript: window.close()'><FONT size=+1 color=#aaccff><b><i>閉じる</i></b></FONT></TD></TR></TABLE>"; Txt+="<BR><TABLE border=1 cellspacing=0 bordercolor=#eeeeff bgcolor=#ffffff>"; Txt+="<TR bgcolor=#ccffff><TD align=center width=30>日</TD>"; Txt+="<TD align=center>曜</TD><TD align=center width=100 nowrap>祝祭日名</TD><TD width=350 align=center nowrap> 行 事 予 定 </TD></TR>"; Su=Nissu(Nen, Tuki); //指定月の日数 Y=Nen%(Math.floor(Nen/100)); M=Tuki; if(M==1) { M=13; Y-=1; } else if(M==2) { M=14; Y-=1; } A="20"; First=(Math.floor(A/4)-2*A+Y+Math.floor(Y/4)+Math.floor((26*(eval(M)+1)/10)))%7; if(First<0) First+=7; for(i=0; i < Su; i++) { j=(First+i)%7; if(j==0) color="<FONT color='red'>"; else { if(j==6) color="<FONT color='blue'>"; else color="<FONT color='black'>"; } if((i+1==DD) && (Tuki==MM) && (Nen==YY)) today="bgcolor='skyblue'"; else today=""; kyo = Date.parse(Nen+"/"+Tuki+"/"+(i+1)); for(k=0; k < holiday.length; k++) { it=Date.parse(holiday[k]); if(kyo==it) { memo="<FONT color='red'>"+saijitsu[k]+"</FONT>"; color="<FONT color='red'>"; break; } else memo=" "; } for(l=0; l < schedule.length; l++) { hd=Date.parse(schedule[l]); if(kyo==hd) { for(m=0; m< str1.length; m++) { yotei[l]=yotei[l].replace(str3[m],str2[m]); } memo2=" "+yotei[l]; break; } else memo2=" "; } Txt+="<TR><TD width=30 align='center'"+today+">"+color+(i+1)+"</FONT></TD><TD align='center'"+today+">"+color+Yoobi[j]+"</FONT></TD><TD align='center' width=100>"+memo+"</TD><TD bgcolor=#ddeeff nowrap>"+" "+memo2+"</TD></TR>"; } Txt+="</TABLE></DIV>"; } function newWin(EM,Nen) { //指定月のウィンドウとカレンダーを用意する関数 Txt="<HTML><HEAD><TITLE>"+Nen+"年"+" "+EM+"月</TITLE>"; Txt+="</HEAD><BODY background='../img/back.jpg'>"; Win=window.open("","",'width=600,height=850,menubar=no,directories=no,toolbar=no,location=no,scrollbars=yes,status=no,left:center,top:middle'); //指定月のウィンドウサイズと位置を指定 Calendar(EM,Nen); with(Win.document) { open("text/html"); write(Txt,"</BODY></HTML>"); close(); } } ### 試したこと 上記の //指定月の日数のところに ```Y=Nen%(Math.floor(Nen/100)); //------ 20191202追加 if(Nen>=2020) { Y=Nen.toString().substring(2,4); } //-----
を挿入しますと、2020年3月までは正しい曜日が出力されますが、その後はダメでした。
補足情報(FW/ツールのバージョンなど)
上記ノカレンダー型予定表を表示するファイル一式のzip-fileをここに置いております。
とりあえず動くものを提示してください
下記に表示ファイル一式を zip ファイルに纏めてあります。
ダウンロード・解凍してみて頂きたく。
https://okoshiyas.jp/Questions/Calendar1.zip
回答1件
あなたの回答
tips
プレビュー