![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在、カレンダーをプログラミングで作成しています。
カレンダーの土日を色づけして表示するところまでは、出来たのですが、祝日でつまづいています。
企業などで、休みは暦通りや、カレンダー通りという言葉を耳にしますが、これを作成するには祝日の振り替え休日のロジックがわかりません。
どの祝日は振り替え休日となるのか、何曜日に対して振り替えされるのか、振り替えされない場合など、ルールがわかりません。
どなたか、詳しい方アドバイスよろしくお願いいたします。
参考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で質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルでカレンダーを作りたい 5 2023/05/16 07:32
- その他(就職・転職・働き方) 土日祝休みでも5/7は仕事の人 2 2022/05/01 09:25
- Excel(エクセル) Excelで作成しているシート(表) 5 2023/06/15 10:20
- その他(行事・イベント) 祝日の事です。あんまりよく分かってません。 祝日が土曜日と重なった場合は振替休日?で月曜日に休日とか 4 2023/04/01 01:42
- 中途・キャリア 転職するか悩んでます。皆様ならどちらを選びますか? A社→基本給18万+固定残業代5万円 営業職 残 3 2022/04/03 18:21
- 労働相談 飲食店勤務のスタッフの勤怠管理について 新規事業で飲食店を始めたのですが、深夜営業もあり勤怠管理が難 2 2023/04/23 15:56
- ゴールデンウィーク・シルバーウィーク 移動する祝日、固定な祝日。この差は? 1 2023/02/21 14:55
- Access(アクセス) Access DTPickerの初期表示月を変えたい 1 2022/08/02 08:55
- その他(暮らし・生活・行事) 今日(2023年1月2日)は振替休日ですけど・・ 3 2023/01/02 12:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
時間帯によって背景画像を変える
-
window.openでタイトル名の指定
-
innerHTMLにて設定した情報を再...
-
『外部JSファイル』を呼び出し...
-
javasciptで時間で背景変更につ...
-
HTMLのメニューをインクルード...
-
○歳△ヶ月と×日を計算してくれる...
-
DOMでdocument.writeを該当部分...
-
引数を渡さずに呼び出し元の変...
-
初歩的なことなんですけど
-
C#OpenCv V4にのエラーに関する...
-
同じIDで定義した要素の配列を...
-
C# 演算 奇数と偶数 表現の仕方
-
関数でy=g(x)のgとは何の略です...
-
「オブジェクトが必要です。」...
-
XMLでのAttributeを持ったNode...
-
google apps scriptの終了のさせ方
-
文字を一文字ずつ表示
-
C#テキストボックスの文字を配...
-
Boolean型配列中のTrueの有無を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openでタイトル名の指定
-
ホームページに日付を自動更新...
-
なぜ、ジャバスクリプトが表示...
-
○歳△ヶ月と×日を計算してくれる...
-
今日の月と日付の1週間後や3日...
-
javascriptとphpの連携で疑問
-
引数を渡さずに呼び出し元の変...
-
document.clear()の使い方について
-
document.writeで画面が消える
-
文字列を点滅させたい
-
java カレンダーの日付指定で...
-
Java Scriptのメソッドについて
-
面白い!便利!と思った【JavaS...
-
javaで画像をランダム表示しつ...
-
ウェブ上にキーボードを作りた...
-
JavaScriptで前月を算出する方法
-
document.writeについて
-
for文のiを使ってリンク先のア...
-
外部JavaScriptでのd...
-
前のページに戻るとページトッ...
おすすめ情報