ブタさんバルーン表示を改修

バルーンの背景色を、薄青(月、火、木)、薄緑(水、金、土)、薄赤(日、祝日、休診日)で変わる様にしました。
その他、ブダさんの足の色を濃くしました。
20161018a
20161018b
20161018c
20161018d
20161018e
20161018f
20161018g

さらに、祝日の情報を追加し、該当日には「休診」を知らせるバルーンも表示するようにしました。
今回は、過去を表示する事は無いので、PHPカレンダーで作成した連想配列から、2016年11月〜2020年12月の分を転用しました。
20161018h
20161018i
20161018j

年末年始とお盆休みの休診日もバルーン表示するようにしました。
20161018h2
20161018k


長くなったソースはこちら

<html>
<head>
	<meta charset="UTF-8">
	<?php	date_default_timezone_set('Asia/Tokyo'); ?>
</head>
<body onload="Init();">
	<canvas id="today_canvas" width="580px" height="62px"></canvas>
	<script type="text/javascript">

holidays = {
"20161103":"文化の日",
"20161123":"勤労感謝の日",
"20161223":"天皇誕生日",
"20170101":"元日",
"20170102":"振替休日",
"20170109":"成人の日",
"20170211":"建国記念の日",
"20170320":"春分の日",
"20170429":"昭和の日",
"20170503":"憲法記念日",
"20170504":"みどりの日",
"20170505":"こどもの日",
"20170717":"海の日",
"20170811":"山の日",
"20170918":"敬老の日",
"20170923":"秋分の日",
"20171009":"体育の日",
"20171103":"文化の日",
"20171123":"勤労感謝の日",
"20171223":"天皇誕生日",
"20180101":"元日",
"20180108":"成人の日",
"20180211":"建国記念の日",
"20180212":"振替休日",
"20180321":"春分の日",
"20180429":"昭和の日",
"20180430":"振替休日",
"20180503":"憲法記念日",
"20180504":"みどりの日",
"20180505":"こどもの日",
"20180716":"海の日",
"20180811":"山の日",
"20180917":"敬老の日",
"20180923":"秋分の日",
"20180924":"振替休日",
"20181008":"体育の日",
"20181103":"文化の日",
"20181123":"勤労感謝の日",
"20181223":"天皇誕生日",
"20181224":"振替休日",
"20190101":"元日",
"20190114":"成人の日",
"20190211":"建国記念の日",
"20190321":"春分の日",
"20190429":"昭和の日",
"20190503":"憲法記念日",
"20190504":"みどりの日",
"20190505":"こどもの日",
"20190506":"振替休日",
"20190715":"海の日",
"20190811":"山の日",
"20190812":"振替休日",
"20190916":"敬老の日",
"20190923":"秋分の日",
"20191014":"体育の日",
"20191103":"文化の日",
"20191104":"振替休日",
"20191123":"勤労感謝の日",
"20191223":"天皇誕生日",
"20200101":"元日",
"20200113":"成人の日",
"20200211":"建国記念の日",
"20200320":"春分の日",
"20200429":"昭和の日",
"20200503":"憲法記念日",
"20200504":"みどりの日",
"20200505":"こどもの日",
"20200506":"振替休日",
"20200720":"海の日",
"20200811":"山の日",
"20200921":"敬老の日",
"20200922":"秋分の日",
"20201012":"体育の日",
"20201103":"文化の日",
"20201123":"勤労感謝の日",
"20201223":"天皇誕生日"
};
		n_Flag = 0;
		timer = 1;
		var canvas = document.getElementById("today_canvas");
		var ctx = canvas.getContext('2d');

		function Init(){
			h = <?php echo date("G"); ?>;
			m = <?php echo date("i"); ?>;
			s = <?php echo date("s"); ?>;
			balloon();
			CheckTime();
		}

		function CheckTime(){
			if (s==60) { s=0;m++;}
			if (m==60) { m=0;h++;}
			if (h==24) { h=0; }
			n_Time=h+":"+m+":"+s;
			if (n_Time=="23:59:58") {
					n_Flag = 1;	 // 23時59分58秒にフラグを立てる
			}
			if (n_Time=="0:0:0") {
				if (n_Flag==1) {	// 重複リロード防止
					// 0時0分0秒なら再表示
					window.location.reload();
					n_Flag = 0;
				}
			}
			s=s+1;
			clearTimeout(timer);
			timer=setTimeout("CheckTime()",1000);
		}

		// balloon関数 start
		 function balloon(){
			y = <?php echo date("Y"); ?>;
			g = <?php echo date("m"); ?>;
			d = <?php echo date("d"); ?>;
			_yobi = <?php echo date("w"); ?>;
			var week_name = new Array("日","月","火","水","木","金","土");
			var wn = week_name[_yobi];
			var _width = 210;
			var _height = 34;
			var weekly_disp_DB    = new Array(300,230,292,52,114,176,238);		//バルーンの開始位置
			var _disp = weekly_disp_DB[_yobi];
			var _holi_width = 138;
			var weekly_holiday_DB    = new Array(140,1,60,354,416,14,80);		//祝日&休診日用バルーンの開始位置
			var _holiday = weekly_holiday_DB[_yobi];
			var weekly_buta_DB    = new Array(534,162,224,286,348,410,472);		//ブタさんの表示位置
			var _buta = weekly_buta_DB[_yobi];
			var weekly_muki_DB    = new Array(1,0,0,1,1,1,1);	//吹き出しの向き(0:左、1:右)
			var _muki = weekly_muki_DB[_yobi];
			var weekly_holi_muki_DB    = new Array(1,1,1,0,0,1,1);	//祝日&休診日用吹き出しの向き(0:左、1:右)
			var _holi_muki = weekly_holi_muki_DB[_yobi];
			var weekly_moji_DB    = new Array(405,336,398,161,223,283,347);	//文字の開始位置
			var _moji = weekly_moji_DB[_yobi];
			var weekly_holi_moji_DB    = new Array(208,70,130,424,486,84,148);	//祝日&休診日用文字の開始位置
			var _holi_moji = weekly_holi_moji_DB[_yobi];
			ctx.clearRect(0,0,580,54);

			if (g<10) { _g = "0" + g;}else { _g = "" + g;}
			if (d<10) { _d = "0" + d;}else { _d = "" + d;}
			_date = y + _g + _d;
			_md = _g + _d;
			//休診日(8月13日~8月16日、12月29日~1月3日)
			if (_md=="0813"|_md=="0814"|_md=="0815"|_md=="0816"|_md=="1229"|_md=="1230"|_md=="1231"|_md=="0101"|_md=="0102"|_md=="0103") {
				_hol=1;
			}else {
				_hol=0;
			}

			// ブタさんの胴体
			ctx.beginPath();
			ctx.fillStyle   = "rgb(255,204,204)";
			ctx.moveTo(_buta- 2,62);
			ctx.quadraticCurveTo(_buta-2,30,_buta+22,30);
			ctx.quadraticCurveTo(_buta+46,30,_buta+46,62);
			ctx.closePath();
			ctx.fill();

			// ブタさんの顔
			ctx.beginPath();
			ctx.fillStyle   = "rgb(255,170,204)";
			ctx.moveTo(_buta+22,20);
			ctx.quadraticCurveTo(_buta+43,20,_buta+45,40);
			ctx.quadraticCurveTo(_buta+45,60,_buta+22,60);
			ctx.quadraticCurveTo(_buta- 1,60,_buta- 1,40);
			ctx.quadraticCurveTo(_buta+ 1,20,_buta+22,20);
			ctx.closePath();
			ctx.fill();

			// 耳と鼻
			ctx.beginPath();
			ctx.fillStyle   = "rgb(255, 85,221)";
			ctx.moveTo(_buta+10,23);	// 右耳
			ctx.quadraticCurveTo(_buta+ 9,22,_buta+ 7,20);
			ctx.quadraticCurveTo(_buta   ,23,_buta- 1,28);
			ctx.quadraticCurveTo(_buta+ 3,34,_buta+ 5,35);
			ctx.quadraticCurveTo(_buta+ 6,23,_buta+ 9,22);
			ctx.moveTo(_buta+34,23);	// 左耳
			ctx.quadraticCurveTo(_buta+35,22,_buta+37,20);
			ctx.quadraticCurveTo(_buta+44,23,_buta+45,28);
			ctx.quadraticCurveTo(_buta+41,34,_buta+39,35);
			ctx.quadraticCurveTo(_buta+38,23,_buta+35,22);
			ctx.moveTo(_buta+22,34);	// 鼻
			ctx.quadraticCurveTo(_buta+30,34,_buta+31,42);
			ctx.quadraticCurveTo(_buta+31,49,_buta+22,49);
			ctx.quadraticCurveTo(_buta+14,49,_buta+13,42);
			ctx.quadraticCurveTo(_buta+13,34,_buta+22,34);
			ctx.closePath();
			ctx.fill();

			// 鼻穴
			ctx.beginPath();
			ctx.fillStyle   = "rgb(255,170,204)";
			ctx.moveTo(_buta+19,39);	// 鼻穴右
			ctx.quadraticCurveTo(_buta+21,39,_buta+21,42);
			ctx.quadraticCurveTo(_buta+21,45,_buta+19,45);
			ctx.quadraticCurveTo(_buta+17,45,_buta+17,42);
			ctx.quadraticCurveTo(_buta+17,39,_buta+19,39);
			ctx.moveTo(_buta+25,39);	// 鼻穴左
			ctx.quadraticCurveTo(_buta+27,39,_buta+27,42);
			ctx.quadraticCurveTo(_buta+27,45,_buta+25,45);
			ctx.quadraticCurveTo(_buta+23,45,_buta+23,42);
			ctx.quadraticCurveTo(_buta+23,39,_buta+25,39);
			ctx.closePath();
			ctx.fill();

			// 目と口
			ctx.beginPath();
			ctx.fillStyle   = "rgb(127,0,0)";
			ctx.arc(_buta+ 8,40,2.5,0,Math.PI*2,true);	//	右目
			ctx.arc(_buta+36,40,2.5,0,Math.PI*2,true);	//	左目
			ctx.moveTo(_buta+13,50);	// 口
			ctx.quadraticCurveTo(_buta+13,56,_buta+22,56);
			ctx.quadraticCurveTo(_buta+31,56,_buta+31,50);
			ctx.closePath();
			ctx.fill();


			// 前足
			ctx.beginPath();
			ctx.fillStyle   = "rgb(255, 85,221)";
			ctx.moveTo(_buta- 2,62);	// 右足
			ctx.quadraticCurveTo(_buta-2,50,_buta+5,50);
			ctx.quadraticCurveTo(_buta+12,50,_buta+12,62);
			ctx.moveTo(_buta+32,62);	// 右足
			ctx.quadraticCurveTo(_buta+32,50,_buta+39,50);
			ctx.quadraticCurveTo(_buta+46,50,_buta+46,62);
			ctx.closePath();
			ctx.fill();

			// 前足のヒヅメ
			ctx.beginPath();
			ctx.fillStyle   = "rgb(127,0,0)";
			ctx.moveTo(_buta-2,62);	// 右足のヒヅメ
			ctx.quadraticCurveTo(_buta-2,56,_buta-1,56);
			ctx.quadraticCurveTo(_buta-1,56,_buta+11,56);
			ctx.quadraticCurveTo(_buta+12,56,_buta+12,62);
			ctx.quadraticCurveTo(_buta+12,62,_buta+6,62);
			ctx.quadraticCurveTo(_buta+6,62,_buta+5,57);
			ctx.quadraticCurveTo(_buta+4,62,_buta+4,62);
			ctx.quadraticCurveTo(_buta+4,62,_buta-2,62);
			ctx.moveTo(_buta+32,62);	// 左足のヒヅメ
			ctx.quadraticCurveTo(_buta+32,56,_buta+33,56);
			ctx.quadraticCurveTo(_buta+33,56,_buta+45,56);
			ctx.quadraticCurveTo(_buta+46,56,_buta+46,62);
			ctx.quadraticCurveTo(_buta+46,62,_buta+40,62);
			ctx.quadraticCurveTo(_buta+40,62,_buta+39,57);
			ctx.quadraticCurveTo(_buta+38,62,_buta+38,62);
			ctx.quadraticCurveTo(_buta+38,62,_buta+32,62);
			ctx.closePath();
			ctx.fill();

			// バルーン(吹き出し)を表示
			ctx.beginPath();
			ctx.moveTo(_disp+20,1);
			ctx.lineTo(_disp+_width-20,1);
			ctx.quadraticCurveTo(_disp+_width,1,_disp+_width,22);
			if (_muki==0) {
				ctx.lineTo(_disp+_width,_height);	// 右(左目側)へ吹き出し
			}else {
				ctx.quadraticCurveTo(_disp+_width+8,22,_disp+_width+16,36);		// 左(右目側)へ吹き出し
				ctx.quadraticCurveTo(_disp+_width+8,30,_disp+_width,32);
				ctx.lineTo(_disp+_width,_height);
			}
			ctx.quadraticCurveTo(_disp+_width,_height+22,_disp+_width-20,_height+22);
			ctx.lineTo(_disp+20,_height+22);
			ctx.quadraticCurveTo(_disp,_height+22,_disp,_height);
			if (_muki==0) {
				ctx.lineTo(_disp,32);	// 右(左目側)へ吹き出し
				ctx.quadraticCurveTo(_disp-16,32,_disp-16,36);
				ctx.quadraticCurveTo(_disp-8 ,22,_disp,22);
			}else {
				ctx.lineTo(_disp,22);		// 左(右目側)へ吹き出し
			}
			ctx.quadraticCurveTo(_disp,1,_disp+20,1);
			ctx.stroke();
			if (_yobi==1 | _yobi==2 | _yobi==4) {
				ctx.fillStyle = 'rgb(221, 238, 255)'; // 薄青
			}
			if (_yobi==3 | _yobi==5 | _yobi==6) {
				ctx.fillStyle = 'rgb(160, 222, 192)'; // 薄緑
			}
			if (_yobi==0) {
				ctx.fillStyle = 'rgb(255, 222, 237)'; // 薄赤
			}

			//祝日と休診日のバルーン表示
			if(holidays[_date] ||_hol==1){
				ctx.fillStyle = 'rgb(255, 222, 237)'; // 祝日or休診日は薄赤
				ctx.moveTo(_holiday+20,1);
				ctx.lineTo(_holiday+_holi_width-20,1);
				ctx.quadraticCurveTo(_holiday+_holi_width,1,_holiday+_holi_width,22);
				if (_holi_muki==0) {
					ctx.lineTo(_holiday+_holi_width,_height);	// 右(左目側)へ吹き出し
				}else {
					ctx.quadraticCurveTo(_holiday+_holi_width+8,22,_holiday+_holi_width+16,36);	// 左(右目側)へ吹き出し
					ctx.quadraticCurveTo(_holiday+_holi_width+8,30,_holiday+_holi_width,32);
					ctx.lineTo(_holiday+_holi_width,_height);
				}
				ctx.quadraticCurveTo(_holiday+_holi_width,_height+22,_holiday+_holi_width-20,_height+22);
				ctx.lineTo(_holiday+20,_height+22);
				ctx.quadraticCurveTo(_holiday,_height+22,_holiday,_height);
				if (_holi_muki==0) {
					ctx.lineTo(_holiday,32);	// 右(左目側)へ吹き出し
					ctx.quadraticCurveTo(_holiday-16,32,_holiday-16,36);
					ctx.quadraticCurveTo(_holiday-8 ,22,_holiday,22);
				}else {
					ctx.lineTo(_holiday,22);		// 左(右目側)へ吹き出し
				}
				ctx.quadraticCurveTo(_holiday,1,_holiday+20,1);
				ctx.stroke();
			}
			ctx.closePath();
			ctx.fill();
			ctx.font = "18px 'MS ゴシック'";
			ctx.strokeStyle = "black";
			ctx.fillStyle = "black"; // 黒
			ctx.textAlign = "center";
			// バルーンの文字(1行目)
			ctx.fillText(y + "年" + g + "月" + d + "日、",_moji,24,260);

			// バルーンの文字(2行目)
			if(holidays[_date]||_hol==1){
				ctx.fillText(wn +"曜日でブー!",_moji,48,260);
			}else {
				switch (_yobi) {
					case 0:ctx.fillText("日曜はお休みでブー!",_moji,48,260);break;
					case 1:ctx.fillText("月曜日でブー!",_moji,48,260);break;
					case 2:ctx.fillText("火曜日でブー!",_moji,48,260);break;
					case 3:ctx.fillText("水曜、午後お休みブー!",_moji,48,260);break;
					case 4:ctx.fillText("木曜日でブー!",_moji,48,260);break;
					case 5:ctx.fillText("金曜、午後お休みブー!",_moji,48,260);break;
					case 6:ctx.fillText("土曜、午後お休みブー!",_moji,48,260);break;
					default :break;
				}
			}

			// 祝日&休診日バルーンの文字
			if(_hol==1){
				if (_md=="0813"|_md=="0814"|_md=="0815"|_md=="0816") {
					ctx.textAlign = "center";
					ctx.fillText("お盆休み",_holi_moji,24,150);
					ctx.fillText("で、休診です",_holi_moji,48,150);
				}						
				if (_md=="1229"|_md=="1230"|_md=="1231"|_md=="0101"|_md=="0102"|_md=="0103") {
					ctx.textAlign = "center";
					ctx.fillText("年末年始",_holi_moji,24,150);
					ctx.fillText("で、休診です",_holi_moji,48,150);
				}						
			}else {
				if(holidays[_date]){
					ctx.textAlign = "center";
					ctx.fillText(holidays[_date],_holi_moji,24,150);
					ctx.fillText("で、お休みです",_holi_moji,48,150);
				}
			}


		}   // balloon end
	</script>
</body>
</html>