質問: ### 前提・実現したいこと プログラミング初心者です。 仕事で早急に必要になったため、手探りでいろんな方のサイトを見ながら作っています。 html/cssはほんの少しかじった程度、プログラミング言語は無知のため、質問自体に問題があったら申し訳ありません。 2つ質問させていただきます。 1:サイトに書かれていたを使ってChrome/Edgeで確認すると空欄のままです。 枠を押すと今日の日付が選択できますが、他の日に変更ができるようです。 出来たらを使って3週間後の日付(可能であれば曜日も)を出したいのですが、反応してくれません。 ではだめなのかと思い、 var hiduke=new Date()+21; と打ってみたのですが、ここに記入するだけではいけないのでしょうか? 2:3週間後の日が祝日だと次の日に自動的に変更されるようにもしたいのですが、調べてもなかなか引っかからず。。 javascriptでは難しいのでしょうか?他の言語では可能ですか?
回答: 3週間後の表示はなんでもいいとのことなので、textContentにベタ書きしています。 追記・修正の依頼の欄にasuchi0819さんからコメントがありますが、JavaScriptに、どの日が祝日かどうかを判別してくれる機能はないです。そもそも世界中で使われているので日本の祝日がどうこうというのが現実的ではないことはおわかりになるかと思います。 一般的にはGoogleカレンダーAPIを利用して取得することもあるかと思いますが、そこまででなければ内閣府が祝日のCSVを提供しているので、ダウンロードしてきて使うというのもありかと思います。今回はコード中に直接書いていますが、ダウンロードしてきたCSVをHTMLと同じサーバーにアップロードすればAjax (fetch) でも取得可能です。PHPなどが使えるなら内閣府に直リンすることもできますが、お行儀がよくないので推奨はできません。 ``` demo ページを開いた日時: 3週間後: 3週間後が祝日ならその次の日: ``` ``` const weekdays = ['日', '月', '火', '水', '木', '金', '土']; // https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv const holidaysCsvFromCabinetOffice = `国民の祝日・休日月日,国民の祝日・休日名称 2020/1/1,元日 2020/1/13,成人の日 2020/2/11,建国記念の日 2020/2/23,天皇誕生日 2020/2/24,休日 2020/3/20,春分の日 2020/4/29,昭和の日 2020/5/3,憲法記念日 2020/5/4,みどりの日 2020/5/5,こどもの日 2020/5/6,休日 2020/7/23,海の日 2020/7/24,スポーツの日 2020/8/10,山の日 2020/9/21,敬老の日 2020/9/22,秋分の日 2020/11/3,文化の日 2020/11/23,勤労感謝の日 `.split(/\r\n+/).map(row => row.split(',')[0]); const now = Date.now(); const today = new Date(now); const afterThreeWeek = new Date(now + 3 * 7 * 24 * 60 * 60 * 1000); // 3週 * 7日 * 24時間 * 60分 * 60秒 * 1000ミリ秒 let ifHolidayDate = new Date(afterThreeWeek.getTime()); while(holidaysCsvFromCabinetOffice.indexOf(`${ifHolidayDate.getFullYear()}/${ifHolidayDate.getMonth()+1}/${ifHolidayDate.getDate()}`) !== -1) { ifHolidayDate = new Date(ifHolidayDate.getTime() + 24 * 60 * 60 * 1000); } document.getElementById('today').textContent = `${today.getFullYear()}/${today.getMonth()+1}/${today.getDate()} (${weekdays[today.getDay()]})`; document.getElementById('after3weeks').textContent = `${afterThreeWeek.getFullYear()}/${afterThreeWeek.getMonth()+1}/${afterThreeWeek.getDate()} (${weekdays[afterThreeWeek.getDay()]})`; document.getElementById('after3weeksIfHoliday').textContent = `${ifHolidayDate.getFullYear()}/${ifHolidayDate.getMonth()+1}/${ifHolidayDate.getDate()} (${weekdays[ifHolidayDate.getDay()]})`; ```