質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

361閲覧

日付を変えても列車のアニメーションが変わりません。

misdreavus1020

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/01/28 21:53

編集2024/01/29 22:52

実現したいこと

// 平日ダイヤか土・休日ダイヤかを判定する
function dayJudge(year, month, date, day) {
// 特殊ダイヤの日付判定
const isSpecialDay = date === 29 && month === 1;

// 曜日判定 const isWeekday = day >= DayOfWeek.MONDAY && day <= DayOfWeek.FRIDAY; const isHoliday = holidays.some(holiday => holiday.year === year && holiday.month === month && holiday.date === date); // 平日ダイヤか土・休日ダイヤかを判定 if (isSpecialDay) { // 特殊ダイヤの場合 return "special"; } else if (isWeekday && !isHoliday) { // 平日ダイヤの場合 return "weekday"; } else if (day === DayOfWeek.SATURDAY) { // 土曜日の場合 return "saturday"; } else if (day === DayOfWeek.SUNDAY) { // 日曜日の場合 return "sunday"; } else { // その他の場合は平日ダイヤとして扱う return "weekday"; }

}
→ const isSpecialDay = date === 29 && month === 1;が const isSpecialDay = date === 30 && month === 1;に変えたら、列車の動きが変わるようにしたいです。

発生している問題・分からないこと

const isSpecialDay = date === 29 && month === 1;→ const isSpecialDay = date === 30 && month === 1;にしても変わらない。

具体的には、1月29日から1月30日に変更した場合、1月29日の状態であれば、表示が出ていたものを、
1月30日になれば、表示が出なくなるようにしたいです。

該当のソースコード

javascript

1// 祝日リスト 2const holidays = [ 3 { year: 2013, month: 1, date: 1 }, 4 { year: 2013, month: 10, date: 14 }, 5 { year: 2013, month: 11, date: 4 }, 6 { year: 2013, month: 12, date: 23 }, 7 { year: 2014, month: 1, date: 1 }, 8 { year: 2014, month: 1, date: 2 }, 9 { year: 2014, month: 1, date: 3 }, 10 { year: 2014, month: 1, date: 13 }, 11 { year: 2014, month: 2, date: 11 }, 12 { year: 2014, month: 3, date: 21 }, 13 { year: 2014, month: 4, date: 29 }, 14 { year: 2014, month: 5, date: 5 }, 15 { year: 2014, month: 7, date: 21 }, 16 { year: 2014, month: 9, date: 15 }, 17 { year: 2014, month: 9, date: 23 }, 18 { year: 2014, month: 10, date: 12 }, 19 { year: 2014, month: 11, date: 3 }, 20 { year: 2014, month: 11, date: 24 }, 21 { year: 2014, month: 12, date: 23 }, 22 { year: 2015, month: 1, date: 1 }, 23 { year: 2015, month: 1, date: 2 }, 24 { year: 2015, month: 1, date: 3 }, 25 { year: 2015, month: 1, date: 12 }, 26 { year: 2015, month: 2, date: 11 }, 27 { year: 2015, month: 3, date: 21 } 28]; 29 30// 平日ダイヤか土・休日ダイヤかを判定する 31function dayJudge(year, month, date, day) { 32 // 特殊ダイヤの日付判定 33 const isSpecialDay = date === 29 && month === 1; 34 35 // 曜日判定 36 const isWeekday = day >= DayOfWeek.MONDAY && day <= DayOfWeek.FRIDAY; 37 const isHoliday = holidays.some(holiday => holiday.year === year && holiday.month === month && holiday.date === date); 38 39 // 平日ダイヤか土・休日ダイヤかを判定 40 if (isSpecialDay) { 41 // 特殊ダイヤの場合 42 return "special"; 43 } else if (isWeekday && !isHoliday) { 44 // 平日ダイヤの場合 45 return "weekday"; 46 } else if (day === DayOfWeek.SATURDAY) { 47 // 土曜日の場合 48 return "saturday"; 49 } else if (day === DayOfWeek.SUNDAY) { 50 // 日曜日の場合 51 return "sunday"; 52 } else { 53 // その他の場合は平日ダイヤとして扱う 54 return "weekday"; 55 } 56} 57

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

チャットgptを使用しましたが、満足のいく結果が得られなかった。

補足

http://r113.web.fc2.com/p/viewer/jrw-hokuriku/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2024/01/29 00:05

「列車の動きが変わる」とは、質問文のコードの中ではどういう意味でしょうか? dayJudge() の戻り値が何かに変わるということ?
misdreavus1020

2024/01/29 00:23

ようは日付を変えても、 画面上は変える前のままだ、というトラブルです。 尚、今、出勤中で、パソコンが手元にない状況です。 帰りが通院もあって、19時となります。 そのため、次の回答はそれ以降となること、 ご容赦ください。
Lhankor_Mhy

2024/01/29 00:44

DayOfWeek には何が入っていますか?
guest

回答1

0

年月日と一緒にdayを渡す意味はありますか?
DayOfWeekはjavascriptではないような。

javascript

1<script> 2const holidays = [ 3 { year: 2013, month: 1, date: 1 }, 4 { year: 2013, month: 10, date: 14 }, 5 { year: 2013, month: 11, date: 4 }, 6 { year: 2013, month: 12, date: 23 }, 7 { year: 2014, month: 1, date: 1 }, 8 { year: 2014, month: 1, date: 2 }, 9 { year: 2014, month: 1, date: 3 }, 10 { year: 2014, month: 1, date: 13 }, 11 { year: 2014, month: 2, date: 11 }, 12 { year: 2014, month: 3, date: 21 }, 13 { year: 2014, month: 4, date: 29 }, 14 { year: 2014, month: 5, date: 5 }, 15 { year: 2014, month: 7, date: 21 }, 16 { year: 2014, month: 9, date: 15 }, 17 { year: 2014, month: 9, date: 23 }, 18 { year: 2014, month: 10, date: 12 }, 19 { year: 2014, month: 11, date: 3 }, 20 { year: 2014, month: 11, date: 24 }, 21 { year: 2014, month: 12, date: 23 }, 22 { year: 2015, month: 1, date: 1 }, 23 { year: 2015, month: 1, date: 2 }, 24 { year: 2015, month: 1, date: 3 }, 25 { year: 2015, month: 1, date: 12 }, 26 { year: 2015, month: 2, date: 11 }, 27 { year: 2015, month: 3, date: 21 } 28]; 29 30// 平日ダイヤか土・休日ダイヤかを判定する 31function dayJudge(year, month, date) { 32 // 特殊ダイヤの日付判定 33 const isSpecialDay = date === 30 && month === 1; 34 35 // 曜日判定 36 const day= (new Date(year,month-1,date)).getDay(); 37 const isSaturday = day===6; 38 const isSunday = day===0; 39 40 const isHoliday = holidays.some(holiday => holiday.year === year && holiday.month === month && holiday.date === date); 41 42 // 平日ダイヤか土・休日ダイヤかを判定 43 if (isSpecialDay) { 44 // 特殊ダイヤの場合 45 return "special"; 46 } else if (isHoliday) { 47 // 平日ダイヤの場合 48 return "holiday"; 49 } else if (day === 6) { 50 // 土曜日の場合 51 return "saturday"; 52 } else if (day === 0) { 53 // 日曜日の場合 54 return "sunday"; 55 } else { 56 // その他の場合は平日ダイヤとして扱う 57 return "weekday"; 58 } 59} 60console.log(dayJudge(2024,1,30));//special 61console.log(dayJudge(2024,1,31));//weekday 62console.log(dayJudge(2024,1,32));//weekday→イレギュラーにしなくいていい? 63console.log(dayJudge(2024,2,1));//weekday 64console.log(dayJudge(2024,2,3));//Saturday 65console.log(dayJudge(2024,2,4));//Sunday 66console.log(dayJudge(2015,2,11));//holiday 67</script>

投稿2024/01/29 00:17

yambejp

総合スコア117615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

misdreavus1020

2024/01/29 08:57

回答ありがとうございます。試してみましたが解決できませんでした。 (試した結果の詳細を記載してください) この場合どの辺りに原因がありそうでしょうか? 具体的には、1月29日から1月30日に変更した場合、1月29日の状態であれば、表示が出ていたものを、 1月30日になれば、表示が出なくなるようにしたいです。
misdreavus1020

2024/02/02 08:41 編集

解決しました! 文明の進化はすごいものです。 一昔前までならこうやって質問サイトで聞くしかなかったのですが、 chatボットに入れると、簡単に解決しました。 http://r113.web.fc2.com/p/viewer/jrw-hokuriku/の、diaTypeJudge.jsですが、 const holidays = [ { year: 2013, month: 1, date: 1 }, { year: 2013, month: 10, date: 14 }, { year: 2013, month: 11, date: 4 }, { year: 2013, month: 12, date: 23 }, { year: 2014, month: 1, date: 1 }, { year: 2014, month: 1, date: 2 }, { year: 2014, month: 1, date: 3 }, { year: 2014, month: 1, date: 13 }, { year: 2014, month: 2, date: 11 }, { year: 2014, month: 3, date: 21 }, { year: 2014, month: 4, date: 29 }, { year: 2014, month: 5, date: 5 }, { year: 2014, month: 7, date: 21 }, { year: 2014, month: 9, date: 15 }, { year: 2014, month: 9, date: 23 }, { year: 2014, month: 10, date: 12 }, { year: 2014, month: 11, date: 3 }, { year: 2014, month: 11, date: 24 }, { year: 2014, month: 12, date: 23 }, { year: 2015, month: 1, date: 1 }, { year: 2015, month: 1, date: 2 }, { year: 2015, month: 1, date: 3 }, { year: 2015, month: 1, date: 12 }, { year: 2015, month: 2, date: 11 }, { year: 2015, month: 3, date: 21 } ]; // 平日ダイヤか土曜日ダイヤか日曜日ダイヤかを判定する function dayJudge(year, month, date, day) { // 特殊ダイヤ1の日付判定 const isSpecialDay1 = ((date === 29 && month === 1) || (date === 1 && month === 2)); // 特殊ダイヤ1の日付判定 const isSpecialDay2 = date === 2 && month === 2; // 特殊ダイヤ1の日付判定 const isSpecialDay3 = date === 3 && month === 2; // 特殊ダイヤ2の日付判定 const isSpecialDay4 = date === 21 && month === 3; // 2月1日が運休かどうか判定 const isNotSpecialDay2 = date === 2 && month === 2; // 曜日判定 const isWeekday = day >= DayOfWeek.MONDAY && day <= DayOfWeek.FRIDAY; const isSaturday = day === DayOfWeek.SATURDAY; const isSunday = day === DayOfWeek.SUNDAY; const isHoliday = holidays.some(holiday => holiday.year === year && holiday.month === month && holiday.date === date); // 平日ダイヤ、土曜日ダイヤ、日曜日ダイヤ、特殊ダイヤ1、特殊ダイヤ2、2月1日が運休かを判定 if (isSpecialDay1) { return "special1"; } else if (isSpecialDay2) { return "special2"; } else if (isSpecialDay3) { return "special3"; } else if (isSpecialDay4) { return "special4"; } else if (isNotSpecialDay3) { return "weekday"; // 2月1日が運休日 return "holyday"; return "special1"; return "special2"; return "special4"; } else if (isWeekday && !isHoliday) { return "weekday"; } else if (isSaturday) { return "saturday"; } else if (isSunday) { return "sunday"; } else { // その他の場合は平日ダイヤとして扱う return "weekday"; } }にすることと、これだけでは、挙動が固まってしまうため、 また、ほかにもあるjsファイルを修正し、main..jsを // 曜日を表す列挙型 const DayOfWeek = { SUNDAY: 0, MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6 }; // 平日ダイヤと土・休日ダイヤを表す列挙型 const DiaType = { WEEKDAY: 0, HOLIDAY: 1, SPECIAL: 2, // 特殊ダイヤを追加 SPECIAL2: 3, // 特殊ダイヤを追加 SPECIAL3: 4, // 特殊ダイヤを追加 SPECIAL4: 5 // 特殊ダイヤを追加 }; let diaDay = DiaType.WEEKDAY; // 初期値は平日ダイヤ // 平日ダイヤか土曜日ダイヤか日曜日ダイヤかを判定する function judgeDiaDay() { let setYear = nowYear; // 年 let setMonth = nowMonth; // 月 let setDate = nowDate; // 日 let setDay = nowDay; // 曜日 // 1月29日の場合は特殊ダイヤ if ((setMonth === 1 && setDate === 29)||(setMonth === 2 && setDate === 1)){ diaDay = DiaType.SPECIAL; } else if (setMonth === 2 && setDate === 2) { diaDay = DiaType.SPECIAL2; } else if (setMonth === 2 && setDate === 3) { diaDay = DiaType.SPECIAL3; } else if (setMonth === 3 && setDate === 21) { diaDay = DiaType.SPECIAL4; } else if (!(setMonth === 2 && setDate === 3)) { // 2月1日が運休ダイヤ diaDay = DiaType.WEEKDAY; diaDay = DiaType.HOLYDAY; diaDay = DiaType.SPECIAL1; diaDay = DiaType.SPECIAL2; diaDay = DiaType.SPECIAL4; } else { // 3時より前なら前日扱いにする if (HHMMSSToSecond(nowHour, nowMinute, nowSecond) < dayChangeTime) { nowDateSet.setDate(nowDateSet.getDate() - 1); setYear = nowDateSet.getYear(); // 年 setMonth = nowDateSet.getMonth() + 1; // 月 setDate = nowDateSet.getDate(); // 日 setDay = nowDateSet.getDay(); // 曜日 } if (setYear < 2000) setYear += 1900; // 年の補正、1900プラスしとかないといけない場合があるため // 平日ダイヤか休日ダイヤの判定 diaDay = dayJudge(setYear, setMonth, setDate, setDay) ? DiaType.WEEKDAY : DiaType.HOLIDAY; } // 表示更新 updateDisplayDiaDay(); return diaDay === DiaType.WEEKDAY; } // 表示更新 function updateDisplayDiaDay() { const todayDiaDaySpan = document.getElementById("todayDiaDaySpan"); if (todayDiaDaySpan) { todayDiaDaySpan.innerHTML = getDiaTypeString(diaDay); // DiaTypeに対応する文字列を取得する関数を使用 todayDiaDaySpan.style.backgroundColor = getDiaTypeColor(diaDay); // DiaTypeに対応する背景色を取得する関数を使用 } } // DiaTypeに対応する文字列を取得する関数 function getDiaTypeString(diaType) { switch (diaType) { case DiaType.WEEKDAY: return " 平日ダイヤ "; case DiaType.HOLIDAY: return "土・休日ダイヤ"; case DiaType.SPECIAL: return " 特殊ダイヤ "; case DiaType.SPECIAL2: return " 特殊ダイヤ2 "; case DiaType.SPECIAL3: return " 特殊ダイヤ3 "; case DiaType.SPECIAL4: return " 特殊ダイヤ4 "; default: return ""; } } // DiaTypeに対応する背景色を取得する関数 function getDiaTypeColor(diaType) { switch (diaType) { case DiaType.WEEKDAY: return "#9ff"; // 平日ダイヤの背景色 case DiaType.HOLIDAY: return "#fcf"; // 土・休日ダイヤの背景色 case DiaType.SPECIAL: return "#ff9"; // 特殊ダイヤの背景色 case DiaType.SPECIAL2: return "#ff9"; // 特殊ダイヤの背景色 case DiaType.SPECIAL3: return "#ff9"; // 特殊ダイヤの背景色 case DiaType.SPECIAL4: return "#ff9"; // 特殊ダイヤの背景色 default: return ""; } } // 各列車が本日運転する列車なのかそうでないのかを判定する // 引数はその列車の運転日情報 例:平日 全日 土・休日 function judgeTrainRunningDay(value) { if (value === "全日") return true; if (value === "平日" && diaDay === DiaType.WEEKDAY) return true; if (value === "土曜・休日運休" && diaDay === DiaType.WEEKDAY) return true; if (value === "毎日運転" && diaDay === DiaType.WEEKDAY) return true; if (value === "休日" && diaDay === DiaType.HOLIDAY) return true; if (value === "土休日" && diaDay === DiaType.HOLIDAY) return true; if (value === "土・休日" && diaDay === DiaType.HOLIDAY) return true; if (value === "土曜・休日運転" && diaDay === DiaType.HOLIDAY) return true; if (value === "毎日運転" && diaDay === DiaType.HOLIDAY) return true; if (value === "1月29日・31日" && diaDay === DiaType.SPECIAL) return true; if (value === "2月1日" && diaDay === DiaType.SPECIAL2) return true; if (value === "2月3日運休" && (!(diaDay === DiaType.SPECIAL3))) return true; if (value === "2月3日" && diaDay === DiaType.SPECIAL3) return true; if (value === "3月21日" && diaDay === DiaType.SPECIAL4) return true; return false; } // 平日ダイヤと土・休日ダイヤと特殊ダイヤの入れ替え function changeDiaType() { switch (diaDay) { case DiaType.WEEKDAY: diaDay = DiaType.HOLIDAY; break; case DiaType.HOLIDAY: diaDay = DiaType.SPECIAL; break; case DiaType.SPECIAL: diaDay = DiaType.SPECIAL2; break; case DiaType.SPECIAL2: diaDay = DiaType.SPECIAL3; break; case DiaType.SPECIAL3: diaDay = DiaType.SPECIAL4; break; case DiaType.SPECIAL4: diaDay = DiaType.WEEKDAY; break; default: break; } // 表示更新 updateDisplayDiaDay(); // 時刻表データ再読み込み getTimeTable(); // 再表示 setNewTime(setSecondSum); // 路線図に列車を配置していく drawTrain(); // 時刻表スペースをリセット resetTimetableSpace(); }とすることにより解決しました。→これにより、特定日だけ車両が画面に映るという挙動ができるようになり、それ以外は、消えるというようになりました。 以上でよろしいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問