![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在、カレンダーをプログラミングで作成しています。
カレンダーの土日を色づけして表示するところまでは、出来たのですが、祝日でつまづいています。
企業などで、休みは暦通りや、カレンダー通りという言葉を耳にしますが、これを作成するには祝日の振り替え休日のロジックがわかりません。
どの祝日は振り替え休日となるのか、何曜日に対して振り替えされるのか、振り替えされない場合など、ルールがわかりません。
どなたか、詳しい方アドバイスよろしくお願いいたします。
参考URLなどあると助かります。
尚、現在テストプログラムはExcel_VBAで作成しています。
今後、VBかC#でも作成する予定です。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
がとっても^100 参考になるかと思います。
法令そのものの解説もありますし、考え方も載せてくれています。
週末にでもじっくり読んでみてください。
コードは上記リンク中の「祝日判定ロジック」を読まれることをお勧めします。
VBA、C# ・・・色々と有志の方々が参加されています。
春分の日・秋分の日についてですが
以前(質問者さんは生まれていないかも)に天文学的に微妙な場合がありまして
国の決定した祝日とカレンダー屋さんのが異なることがありました (^_^;)
カレンダー屋さんは早い物は秋口から刷りはじめます。
結果、当社で配るカレンダーには修正シールが付いてきて
みんなでペタペタ貼っていた記憶があります。
それ以来?、前年の2月に官報で発表されることになりました。
アドバイスありがとうございます。
シールが貼ってあるカレンダーを以前見たことがあります。
現在、テストでExcelVBAでカレンダーのレイアウト表示と、土日色づけまで作成したのですが、春分と秋分の日を考慮すると、APIにした方が良いのかも・・・と悩んでいます。
思い切って、両方作ってしまうつもりです。
C#+APIが後々考えると使いまわしもできて、良い気もするのですが、APIのバージョン変更などの対応が少し気がかりです。
いろいろ試してみます。
アドバイス参考になりました。ありがとうございました。
No.4
- 回答日時:
正確には「日本国の法令を見てください」となります。
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.h …
> 第3条
> 2.「国民の祝日」が日曜日に当たるときは、その日後においてその日に最も近い「国民の祝日」でない日を休日とする。
ですが、春分/秋分のように「前年まで決まらない」ものがあったりするので、(振替休日も含めて)信頼できるデータを利用するのが現実的でしょう。
上のサイトにも
> 平成26年(2014)の国民の祝日
> 5月6日及び11月24日は休日となります。
とあります。
「前年まで決まらない」が曲者ですね。
やはり、オンラインからデータを取得する方が無難かもしれません。
前年まで決まらない日が振り替え休日となった場合、プログラムを静的に記入しておくのはリスクですね。
動的に取得する方法も検討します。
非常に参考になりました。ありがとうございました。
No.3
- 回答日時:
if (yyyy == YYYY && mm == MM && dd == DD) document.write('<font color=green><b>');
else if (x == 0) document.write('<font color=red>');
else if (x == 6) document.write('<font color=blue>');
if (DD >= 1 && DD <= monthDay[MM - 1]) document.write(DD);
else document.write('<br>');
if (yyyy == YYYY && mm == MM && dd == DD) document.write('</b></font>');
else if (x == 0) document.write('</font>');
else if (x == 6) document.write('</font>');
if (sf >= 1) document.write('</a>');
if (sf >= 1 && x == 0) snext = 1;
if (sf == 16) snext = 0;
document.write('</td>');
}
document.write('</tr>');
}
document.write('</table>');
}
//--->
</script>
No.2
- 回答日時:
JavaScript で作ったものがありますので、半分に分けて書き込みます。
<script language="JavaScript">
<!---
function cal(YYYY, MM){
monthDay = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
monthName = new Array("1-睦月","2-如月","3-弥生","4-卯月","5-皐月","6-水無月","7-文月","8-葉月","9-長月","10-神無月","11-霜月","12-師走");
saijituNM = new Array("元日","成人の日:第2月曜日","建国記念の日","春分の日","昭和の日","憲法記念日","みどりの日","こどもの日","海の日:第3月曜日","敬老の日:第3月曜日","秋分の日","体育の日:第2月曜日","文化の日","勤労感謝の日","天皇誕生日","国民の休日");
syunbun = new Array(20,20,21,21,20,20,21,21,20,20,21,21,20,20,21,21,20,20,21,21,20);
syuubun = new Array(23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,22,23,23,23,22);
sf = 0; snext = 0;
now = new Date();
yyyy = now.getYear() + 1900;
mm = now.getMonth()+1;
dd = now.getDate();
YYYY1 = Math.floor(YYYY / 4);
YYYY2 = Math.floor(YYYY / 100);
YYYY3 = Math.floor(YYYY / 400);
if (YYYY != YYYY1 * 4) monthDay[1] = 28;
else
if (YYYY != YYYY2 * 100) monthDay[1] = 29;
else
if (YYYY != YYYY3 * 400) monthDay[1] = 28;
else monthDay[1] = 29;
leftUP = - YYYY - YYYY1 + YYYY2 - YYYY3;
if (monthDay[1] == 29) leftUP = leftUP + 1;
for (i = 0; i < MM - 1; i++){
leftUP = leftUP - monthDay[i];
}
leftUP1 = Math.ceil(leftUP / 7);
leftUP = leftUP - leftUP1 * 7;
document.write('<table border=1 cellspacing=0 bordercolor=white>');
document.write('<tr><td colspan=2 align=center>' + YYYY + '</td>');
document.write('<td colspan=5 align=right>' + monthName[MM - 1] + '</td></tr>');
document.write('<tr align=center><td><font color=red>日</font></td><td>月</td><td>火</td>');
document.write('<td>水</td><td>木</td><td>金</td><td><font color=blue>土</font></td></tr>');
for (y = 0; y < 6; y++){
document.write('<tr align=center>');
for (x = 0; x < 7; x++){
DD = leftUP + y * 7 + x + 1;
sf = 0;
if (MM == 1 && DD == 1) sf = 1;
else if (MM == 1 && x == 1 && DD >= 8 && DD <= 14) sf = 2;
else if (MM == 2 && DD == 11) sf = 3;
else if (MM == 3 && YYYY >= 2000 && YYYY <= 2020
&& DD == syunbun[YYYY - 2000]) sf = 4;
else if (MM == 4 && DD == 29) sf = 5;
else if (MM == 5 && DD == 3) sf = 6;
else if (MM == 5 && DD == 4) sf = 7;
else if (MM == 5 && DD == 5) sf = 8;
else if (MM == 7 && x == 1 && DD >= 15 && DD <= 21) sf = 9;
else if (MM == 9 && x == 1 && DD >= 15 && DD <= 21) sf = 10;
else if (MM == 9 && x == 2 && DD >= 16 && DD <= 22
&& YYYY >= 2000 && YYYY <= 2020
&& DD == syuubun[YYYY - 2000] - 1) sf = 16;
else if (MM == 9 && YYYY >= 2000 && YYYY <= 2020
&& DD == syuubun[YYYY - 2000]) sf = 11;
else if (MM == 10 && x == 1 && DD >= 8 && DD <= 14) sf = 12;
else if (MM == 11 && DD == 3) sf = 13;
else if (MM == 11 && DD == 23) sf = 14;
else if (MM == 12 && DD == 23) sf = 15;
else if (snext == 1) { snext = 0; document.write('<td bgcolor=deeppink><a href="' + document.URL + '" title="振替休日">'); }
else document.write('<td>');
if (sf >= 1) {
document.write('<td bgcolor=hotpink>');
document.write('<a href="' + document.URL + '" title="' + saijituNM[sf - 1] + '">');
}
No.1
- 回答日時:
使用条件ですが、
オンラインでカレンダー情報をゲットしてから使うことになると思うのですが、
その部分は、Googleで検索してもらう事にして、
私からの次の情報は、役に立ちそうなので書き込んでおきます。
http://blog.howdylikes.jp/entry/20120806/1344265 …
https://developers.google.com/google-apps/calend …
参考URL:http://blog.howdylikes.jp/entry/20120806/1344265 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptとHTMLの課題です
-
document.write()の()内にタグ...
-
来年の今日の曜日・・・?
-
for文のiを使ってリンク先のア...
-
なぜ、ジャバスクリプトが表示...
-
○歳△ヶ月と×日を計算してくれる...
-
ホームページに日付を自動更新...
-
window.openでタイトル名の指定
-
javascriptとphpの連携で疑問
-
食材の期限を管理するためにGAS...
-
javascriptで入力フォームに日...
-
同じIDで定義した要素の配列を...
-
jspからjavascriptの変数引継ぎ
-
google apps scriptの終了のさせ方
-
idを使わずにonclickで自身の要...
-
翌月を取得するGASが分かりません
-
関数でy=g(x)のgとは何の略です...
-
innerHTML実行後のイベント
-
HTMLで作った時報アプリが動き...
-
これで何故震えるのか、とても...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openでタイトル名の指定
-
JavaScriptとHTMLの課題です
-
○歳△ヶ月と×日を計算してくれる...
-
なぜ、ジャバスクリプトが表示...
-
Java Scriptのメソッドについて
-
問題の個数を数える。
-
java カレンダーの日付指定で...
-
現在の日付から、1ヶ月前にす...
-
javaで画像をランダム表示しつ...
-
document.writeで画面が消える
-
ホームページに日付を自動更新...
-
JavaScriptの表示方法
-
document.clear()の使い方について
-
elseを使わないで複合条件をす...
-
更新でランダムでページ内のテ...
-
innerHTMLにて設定した情報を再...
-
時間帯によって背景画像を変える
-
配列を使って平均を求めるプロ...
-
htmlの中に記述している画像フ...
-
VscodeでFor分を入力しましたが...
おすすめ情報