@sembokulove (Missing place)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

在線プログラムが日にちの判断をしてくれないです。具体的いうと、diatymejudge内にあるconst holidaysが聞かないです。

解決したいこと

ここに解決したい内容を記載してください。

例)
diatypejudgeファイルで指定されている、const holidays関数が効き目なしです。

発生している問題・エラー


出ているエラーメッセージを入力

例)

NameError (uninitialized constant World)

在宣 質問-11 20250610 Tue.png
uploading...0

該当するソースコード

// diaTypeJudge.js から holidays 配列をインポートまたはコピーしてきたと仮定します。

function getJapaneseHolidays(year) {
    const holidays = [];

    // 固定祝日
    holidays.push({ month: 1, date: 1 });   // 元日
    holidays.push({ month: 2, date: 11 });  // 建国記念の日
    holidays.push({ month: 2, date: 23 });  // 天皇誕生日 (2020年以降)
    holidays.push({ month: 4, date: 29 });  // 昭和の日
    holidays.push({ month: 5, date: 3 });   // 憲法記念日
    holidays.push({ month: 5, date: 5 });   // こどもの日
    holidays.push({ month: 11, date: 3 });  // 文化の日
    holidays.push({ month: 11, date: 23 }); // 勤労感謝の日

    // 移動祝日 (ハッピーマンデー制度)
    // 成人の日 (1月の第2月曜日)
    holidays.push(getNthDayOfMonth(year, 1, DayOfWeek.MONDAY, 2));
    // 海の日 (7月の第3月曜日)
    holidays.push(getNthDayOfMonth(year, 7, DayOfWeek.MONDAY, 3));
    // 敬老の日 (9月の第3月曜日)
    holidays.push(getNthDayOfMonth(year, 9, DayOfWeek.MONDAY, 3));
    // スポーツの日 (10月の第2月曜日)
    // ※2020年は特例で7月24日、2021年は8月9日、それ以外は10月第2月曜
    // ここでは一般的な10月第2月曜として記述します。特例対応が必要なら別途ロジックを追加。
    holidays.push(getNthDayOfMonth(year, 10, DayOfWeek.MONDAY, 2));


    // 春分の日と秋分の日は計算が複雑なため、簡略化した近似値または外部データを使用するのが一般的ですが、
    // ここでは簡略化されたロジック(一般的な日付の範囲)で記述します。
    // 正確な計算は国立天文台などのデータを参照するか、より高度なライブラリが必要です。
    // 仮に春分の日を3月20日頃、秋分の日を9月23日頃とします。
    // 厳密な計算が必要な場合は、複雑な天文計算を行うか、信頼できるAPI等からデータを取得する必要があります。
    // 例: 春分の日 (約3月20日)
    const equinoxSpring = calculateVernalEquinox(year); // 後述の関数
    if (equinoxSpring) {
        holidays.push({ month: equinoxSpring.getMonth() + 1, date: equinoxSpring.getDate() });
    }
    // 例: 秋分の日 (約9月23日)
    const equinoxAutumn = calculateAutumnalEquinox(year); // 後述の関数
    if (equinoxAutumn) {
        holidays.push({ month: equinoxAutumn.getMonth() + 1, date: equinoxAutumn.getDate() });
    }

    // 振替休日(特定の祝日が日曜日の場合に翌平日が休日になる)の計算
    // これは、isHolidayOrSunday 関数内で、祝日判定後に自動的に判定されるようにします。
    // holidays配列に直接追加せず、isHolidayOrSundayのロジックで対応する方が柔軟です。

    return holidays;
}


// N番目の特定の曜日の日付を取得するヘルパー関数
function getNthDayOfMonth(year, month, dayOfWeek, n) {
    let count = 0;
    let day = 1;
    let targetDate = null;
    while (true) {
        const dateObj = new Date(year, month - 1, day);
        if (dateObj.getMonth() !== month - 1) { // 月が変わったら終了
            break;
        }
        if (dateObj.getDay() === dayOfWeek) {
            count++;
            if (count === n) {
                targetDate = dateObj;
                break;
            }
        }
        day++;
    }
    if (targetDate) {
        return { year: targetDate.getFullYear(), month: targetDate.getMonth() + 1, date: targetDate.getDate() };
    }
    return null; // 見つからなかった場合
}

// 春分の日・秋分の日を計算する簡易関数 (あくまで簡易版であり、厳密な計算ではありません)
// 正確な計算は非常に複雑なため、国立天文台などのデータを用いるのが確実です。
// ここでは、一般的な傾向に基づいた近似値で実装します。
// 例: 春分の日 (3月20日または21日)
function calculateVernalEquinox(year) {
    // 1980年~2099年の間に3月20日または21日
    // 簡易的なロジックとして、3月20日をデフォルトとし、必要に応じて21日を考慮する
    let day = 20;
    // 2012年以降、4年に一度21日になる傾向 (うるう年と関連)
    if (year >= 2012 && year % 4 === 0) { // 簡易的な例
        // 厳密な計算はさらに複雑ですが、ここではあくまで例
        if (year === 2012 || year === 2016 || year === 2020 || year === 2024 || year === 2028) { // 適当な例
            day = 20; // 実際は2020年は20日、2024年は20日など
        } else {
            // day = 21; // これは非常に簡易な例で、年によって異なる
        }
    }
    // 国立天文台のデータに基づく例(あくまで例示で、実際の年によって異なる)
    // 2020年: 3/20, 2021年: 3/20, 2022年: 3/20, 2023年: 3/21, 2024年: 3/20, 2025年: 3/20
    // この関数は簡易的なものであり、正確性を保証するものではありません。
    return new Date(year, 2, day); // 月は0から始まるため 2 = 3月
}

// 秋分の日 (9月22日または23日)
function calculateAutumnalEquinox(year) {
    // 1980年~2099年の間に9月22日または23日
    let day = 23;
    // 簡易的なロジックとして、9月23日をデフォルトとし、必要に応じて22日を考慮する
    if (year >= 2012 && year % 4 === 0) { // 簡易的な例
        // 厳密な計算はさらに複雑ですが、ここではあくまで例
        if (year === 2012 || year === 2016 || year === 2020 || year === 2024 || year === 2028) { // 適当な例
            day = 22; // 実際は2020年は22日、2024年は22日など
        } else {
            // day = 23; // これは非常に簡易な例で、年によって異なる
        }
    }
    // 国立天文台のデータに基づく例(あくまで例示で、実際の年によって異なる)
    // 2020年: 9/22, 2021年: 9/23, 2022年: 9/23, 2023年: 9/23, 2024年: 9/22, 2025年: 9/23
    // この関数は簡易的なものであり、正確性を保証するものではありません。
    return new Date(year, 8, day); // 月は0から始まるため 8 = 9月
}


// isHolidayOrSunday 関数を修正し、振替休日にも対応させる
function isHolidayOrSunday(year, month, day) {
    const dateObj = new Date(year, month - 1, day);

    // 1. まず日曜日であるかチェック
    if (dateObj.getDay() === DayOfWeek.SUNDAY) {
        return true; // 日曜日
    }

    // 2. その年の祝日リストを動的に取得
    const currentYearHolidays = getJapaneseHolidays(year);

    // 3. 祝日リストに日付が含まれているかチェック
    for (let i = 0; i < currentYearHolidays.length; i++) {
        if (currentYearHolidays[i].month === month && currentYearHolidays[i].date === day) {
            return true; // 祝日
        }
    }

    // 4. 振替休日かチェック(祝日が日曜日の場合、翌平日が振替休日)
    // その日が月曜日以降で、かつ前日が日曜日で祝日である場合
    if (dateObj.getDay() === DayOfWeek.MONDAY) { // 月曜日のみをチェック
        const previousDay = new Date(year, month - 1, day - 1); // 前日
        const previousDayYear = previousDay.getFullYear();
        const previousDayMonth = previousDay.getMonth() + 1;
        const previousDayDate = previousDay.getDate();

        // 前日が日曜日か、かつ前日が祝日であるか(ただし、isHolidayOrSunday自体を再帰的に呼ぶと無限ループになるので注意)
        // ここでは、祝日リストに直接含まれているか、または前日が日曜日であるかをチェック
        if (previousDay.getDay() === DayOfWeek.SUNDAY) {
            const previousYearHolidays = getJapaneseHolidays(previousDayYear);
            for (let i = 0; i < previousYearHolidays.length; i++) {
                if (previousYearHolidays[i].month === previousDayMonth && previousYearHolidays[i].date === previousDayDate) {
                    return true; // 前日が日曜日で祝日なので、本日(月曜日)は振替休日
                }
            }
        }
    }


    return false; // 日曜日でも祝日でも振替休日でもない場合
}

// dayJudge 関数は、以前提示した「修正案1(ネストしたswitch形式)」または「修正案2(ネストしたswitch形式)」のどちらかを適用してください。
// ここでは修正案1の例を再掲します。
function dayJudge(year, month, date, day) { // day は 0:日曜, 1:月曜, ..., 6:土曜

    // 1. まず特殊ダイヤ1と特殊ダイヤ2の判定を先に行う (優先順位を考慮)
    const isSpecialDay1 = (date === 12 && month === 10)||(date === 3 && month === 11)||(date === 24 && month === 11);
    if (isSpecialDay1) {
        return DiaType.SPECIAL1;
    }

    // 2. 個別の日付ダイヤ(OCT_XX, NOV_XXなど)の判定を優先的に行う
    switch (month) {
        case 10: // 10月の処理
            switch (date) {
                case 1: return DiaType.OCT_01;
                case 2: return DiaType.OCT_02;
                case 3: return DiaType.OCT_03;
                case 4: return DiaType.OCT_04;
                case 5: return DiaType.OCT_05;
                case 6: return DiaType.OCT_06;
                case 7: return DiaType.OCT_07;
                case 8: return DiaType.OCT_08;
                case 9: return DiaType.OCT_09;
                case 10: return DiaType.OCT_10;
                case 11: return DiaType.OCT_11;
                case 12: return DiaType.OCT_12;
                case 13: return DiaType.OCT_13;
                case 14: return DiaType.OCT_14;
                case 15: return DiaType.OCT_15;
                case 16: return DiaType.OCT_16;
                case 17: return DiaType.OCT_17;
                case 18: return DiaType.OCT_18;
                case 19: return DiaType.OCT_19;
                case 20: return DiaType.OCT_20;
                case 21: return DiaType.OCT_21;
                case 22: return DiaType.OCT_22;
                case 23: return DiaType.OCT_23;
                case 24: return DiaType.OCT_24;
                case 25: return DiaType.OCT_25;
                case 26: return DiaType.OCT_26;
                case 27: return DiaType.OCT_27;
                case 28: return DiaType.OCT_28;
                case 29: return DiaType.OCT_29;
                case 30: return DiaType.OCT_30;
                case 31: return DiaType.OCT_31;
                default: break;
            }
            break;
        case 11: // 11月の処理
            switch (date) {
                case 1: return DiaType.NOV_01;
                case 2: return DiaType.NOV_02;
                case 3: return DiaType.NOV_03;
                case 4: return DiaType.NOV_04;
                case 5: return DiaType.NOV_05;
                case 6: return DiaType.NOV_06;
                case 7: return DiaType.NOV_07;
                case 8: return DiaType.NOV_08;
                case 9: return DiaType.NOV_09;
                case 10: return DiaType.NOV_10;
                case 11: return DiaType.NOV_11;
                case 12: return DiaType.NOV_12;
                case 13: return DiaType.NOV_13;
                case 14: return DiaType.NOV_14;
                case 15: return DiaType.NOV_15;
                case 16: return DiaType.NOV_16;
                case 17: return DiaType.NOV_17;
                case 18: return DiaType.NOV_18;
                case 19: return DiaType.NOV_19;
                case 20: return DiaType.NOV_20;
                case 21: return DiaType.NOV_21;
                case 22: return DiaType.NOV_22;
                case 23: return DiaType.NOV_23;
                case 24: return DiaType.NOV_24;
                case 25: return DiaType.NOV_25;
                case 26: return DiaType.NOV_26;
                case 27: return DiaType.NOV_27;
                case 28: return DiaType.NOV_28;
                case 29: return DiaType.NOV_29;
                case 30: return DiaType.NOV_30;
                default: break;
            }
            break;
        default:
            break;
    }

    // 3. 日曜日または祝日であるかどうかの判定(holidays配列と日曜日の両方を含む)
    if (isHolidayOrSunday(year, month, date)) {
        const dateObj = new Date(year, month - 1, date);
        if (dateObj.getDay() === DayOfWeek.SUNDAY) {
            return DiaType.SUNDAY;
        } else {
            return DiaType.HOLIDAY;
        }
    }

    // 4. 土曜日であるかどうかの判定
    if (day === DayOfWeek.SATURDAY) {
        return DiaType.SATURDAY;
    }

    // 5. それ以外は平日
    return DiaType.WEEKDAY;
}

例)
参照元

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

自分で試したこと

geminiで何度試したことでしょうか。
ちなみにmain.jsの改変版はこちらになります。
尚このjsは、上のほうはあまりいじっていないので、今回は割愛、
また、読者の皆様の読むことに対する精神的身体的負担への配慮により誠に勝手ながら、一部の日付や一部の〇〇日運転という部分は、長くなるので割愛させていただきました。
おそらく、先ほど挙げました、diatymejudge.jsfunction dayJudge(year, month, date, day) {のエラーだと思われますので、まず、目をつけていただくのはそのコード内容かと思います。
ただそうはいっても、swith分を壊されますと、今度は、日付判定が聞かなくなる可能性があるので、その辺はご留意を。

// 曜日を表す列挙型
// 曜日を表す列挙型
const DayOfWeek = {
    SUNDAY: 0,
    MONDAY: 1,
    TUESDAY: 2,
    WEDNESDAY: 3,
    THURSDAY: 4,
    FRIDAY: 5,
    SATURDAY: 6
};

const DiaType = {
    OCT_01: 0,
    OCT_02: 1,
    OCT_03: 2,,
    NOV_30: 60,
    WEEKDAY: 61,
    HOLIDAY: 62
};

let diaDay = DiaType.WEEKDAY;

function judgeDiaDay() {
    let nowDateSet = new Date(); // 現在の日付を取得
    let nowHour = nowDateSet.getHours();
    let nowMinute = nowDateSet.getMinutes();
    let nowSecond = nowDateSet.getSeconds();
    let nowDay = nowDateSet.getDay();
    
    // 現在の年、月、日を取得
    let nowYear = nowDateSet.getFullYear();
    let nowMonth = nowDateSet.getMonth() + 1; // 月は0から始まるため1を加算
    let nowDate = nowDateSet.getDate();

    // 日付変更時刻と現在時刻を比較
    if (HHMMSSToSecond(nowHour, nowMinute, nowSecond) < dayChangeTime) {
        nowDateSet.setDate(nowDateSet.getDate() - 1); // 前日の日付に変更
        nowYear = nowDateSet.getFullYear();
        nowMonth = nowDateSet.getMonth() + 1;
        nowDate = nowDateSet.getDate();
        nowDay = nowDateSet.getDay();
    }

    if (nowYear < 2000) nowYear += 1900; // 年の補正

    setYear = nowYear; // ここでsetYearに現在の年を設定
    setMonth = nowMonth;
    setDate = nowDate;
    setDay = nowDay;


    switch (setMonth) {
        case 10:
            switch (setDate) {
                case 01: diaDay = DiaType.OCT_01; break;
                case 02: diaDay = DiaType.OCT_02; break;
                case 03: diaDay = DiaType.OCT_03; break;
                case 31: diaDay = DiaType.OCT_31; break;
                default: 
                    if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SUNDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.MONDAY;  // 週末の処理
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.TUESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEDNESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.THURSDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.FRIDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SATURDAY;
                    } else if (isWeekend(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEEKEND;  // 週末の処理
                    } else {
                        diaDay = DiaType.HOLIDAY;
                    }
            }
            break;
        case 11:
            switch (setDate) {
                case 01: diaDay = DiaType.NOV_01; break;
                case 02: diaDay = DiaType.NOV_02; break;
                case 03: diaDay = DiaType.NOV_03; break;
                case 30: diaDay = DiaType.NOV_30; break;
                default: 
                    if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SUNDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.MONDAY;  // 週末の処理
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.TUESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEDNESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.THURSDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.FRIDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SATURDAY;
                    } else if (isWeekend(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEEKEND;  // 週末の処理
                    } else {
                        diaDay = DiaType.HOLIDAY;
                    }
            }
                break;
            default: 
                diaDay = dayJudge(setYear, setMonth, setDate, setDay) === "weekday" ? DiaType.WEEKDAY : DiaType.HOLIDAY;
    }

    updateDisplayDiaDay();
    return diaDay === DiaType.WEEKDAY;
}

function updateDisplayDiaDay() {
    const todayDiaDaySpan = document.getElementById("todayDiaDaySpan");
    if (todayDiaDaySpan) {
        todayDiaDaySpan.innerHTML = getDiaTypeString(diaDay);
        todayDiaDaySpan.style.backgroundColor = getDiaTypeColor(diaDay);
    }
}

function getDiaTypeString(diaType) {
    switch (diaType) {
        case DiaType.WEEKDAY: return " 平日ダイヤ ";
        case DiaType.HOLIDAY: return "土・休日ダイヤ";
        case DiaType.OCT_01: return "10月01日ダイヤ";
        case DiaType.OCT_02: return "10月02日ダイヤ";
        case DiaType.OCT_03: return "10月03日ダイヤ";

        case DiaType.NOV_30: return "11月30日ダイヤ";
        default: return "";
    }
}

function getDiaTypeColor(diaType) {
    switch (diaType) {
        case DiaType.WEEKDAY: return "#9ff";
        case DiaType.HOLIDAY: return "#fcf";
        case DiaType.OCT_01: return "#a0f0a0"; // 例:2月11日ダイヤの背景色
        case DiaType.OCT_02: return "#f0a0a0"; // 例:2月12日ダイヤの背景色
        case DiaType.OCT_03: return "#a0f0a0"; // 例:2月11日ダイヤの背景色
        case DiaType.NOV_30: return "#a0f0a0"; // 例:2月11日ダイヤの背景色
        default: return "";
    }
}


function isHoliday(year, month, day) {
    const date = new Date(year, month - 1, day); // Month is 0-indexed in Date
    const dayOfWeek = date.getDay();
    return dayOfWeek === 0 || dayOfWeek === 6; // 0 is Sunday, 6 is Saturday
}

function isWeekday(year, month, day) {
    const dayOfWeek = new Date(year, month - 1, day).getDay();
    return dayOfWeek >= 1 && dayOfWeek <= 5;
}

function isSunday(year, month, day) {
    const date = new Date(year, month - 1, day);
    return date.getDay() === 0;
}
function isTwilightDown(year, month, day) {
    const date = new Date(year, month - 1, day);
    const dayOfWeek = date.getDay();
    return dayOfWeek === 1 || dayOfWeek === 3 || dayOfWeek === 5 || dayOfWeek === 6;
}
function isTwilightUp(year, month, day) {
    const date = new Date(year, month - 1, day);
    const dayOfWeek = date.getDay();
    return dayOfWeek === 0 || dayOfWeek === 1 || dayOfWeek === 3 || dayOfWeek === 5;
}
function isWednesday(year, month, day) {
    const date = new Date(year, month - 1, day);
    return date.getDay() === 3;
}

function judgeTrainRunningDay(value) {
    if (value === "全日") return true;
    if (value === "平日") {
        if (((diaDay === DiaType.WEEKDAY))||
           ((diaDay === DiaType.OCT_01 && isWeekday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isWeekday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isWeekday(setYear, 10, 3)) ||
            (diaDay === DiaType.OCT_04 && isWeekday(setYear, 10, 4)) ||
            (diaDay === DiaType.OCT_05 && isWeekday(setYear, 10, 5)) ||
            (diaDay === DiaType.OCT_06 && isWeekday(setYear, 10, 6)) ||
            (diaDay === DiaType.OCT_07 && isWeekday(setYear, 10, 7)) ||
            (diaDay === DiaType.OCT_08 && isWeekday(setYear, 10, 8)) ||
            (diaDay === DiaType.OCT_09 && isWeekday(setYear, 10, 9)) ||
            (diaDay === DiaType.OCT_10 && isWeekday(setYear, 10, 10)) ||
            (diaDay === DiaType.OCT_11 && isWeekday(setYear, 10, 11)) ||
            (diaDay === DiaType.OCT_12 && isWeekday(setYear, 10, 12)) ||
            (diaDay === DiaType.OCT_13 && isWeekday(setYear, 10, 13)) ||
            (diaDay === DiaType.OCT_14 && isWeekday(setYear, 10, 14)) ||
            (diaDay === DiaType.OCT_15 && isWeekday(setYear, 10, 15)) ||
            (diaDay === DiaType.OCT_16 && isWeekday(setYear, 10, 16)) ||
            (diaDay === DiaType.OCT_17 && isWeekday(setYear, 10, 17)) ||
            (diaDay === DiaType.OCT_18 && isWeekday(setYear, 10, 18)) ||
            (diaDay === DiaType.OCT_19 && isWeekday(setYear, 10, 19)) ||
            (diaDay === DiaType.OCT_20 && isWeekday(setYear, 10, 20)) ||
            (diaDay === DiaType.OCT_21 && isWeekday(setYear, 10, 21)) ||
            (diaDay === DiaType.OCT_22 && isWeekday(setYear, 10, 22)) ||
            (diaDay === DiaType.OCT_23 && isWeekday(setYear, 10, 23)) ||
            (diaDay === DiaType.OCT_24 && isWeekday(setYear, 10, 24)) ||
            (diaDay === DiaType.OCT_25 && isWeekday(setYear, 10, 25)) ||
            (diaDay === DiaType.OCT_26 && isWeekday(setYear, 10, 26)) ||
            (diaDay === DiaType.OCT_31 && isWeekday(setYear, 10, 31)) ||
            (diaDay === DiaType.NOV_01 && isWeekday(setYear, 11, 1)) ||
            (diaDay === DiaType.NOV_02 && isWeekday(setYear, 11, 2)) ||
            (diaDay === DiaType.NOV_03 && isWeekday(setYear, 11, 3)) ||
            (diaDay === DiaType.NOV_04 && isWeekday(setYear, 11, 4)) ||
            (diaDay === DiaType.NOV_05 && isWeekday(setYear, 11, 5)) ||
            (diaDay === DiaType.NOV_06 && isWeekday(setYear, 11, 6)) ||
            (diaDay === DiaType.NOV_07 && isWeekday(setYear, 11, 7)) ||
            (diaDay === DiaType.NOV_08 && isWeekday(setYear, 11, 8)) ||
            (diaDay === DiaType.NOV_09 && isWeekday(setYear, 11, 9)) ||
            (diaDay === DiaType.NOV_10 && isWeekday(setYear, 11, 10)) ||
            (diaDay === DiaType.NOV_11 && isWeekday(setYear, 11, 11)) ||
            (diaDay === DiaType.NOV_12 && isWeekday(setYear, 11, 12)) ||
            (diaDay === DiaType.NOV_13 && isWeekday(setYear, 11, 13)) ||
            (diaDay === DiaType.NOV_14 && isWeekday(setYear, 11, 14)) ||
            (diaDay === DiaType.NOV_15 && isWeekday(setYear, 11, 15)) ||
            (diaDay === DiaType.NOV_16 && isWeekday(setYear, 11, 16)) ||
            (diaDay === DiaType.NOV_17 && isWeekday(setYear, 11, 17)) ||
            (diaDay === DiaType.NOV_18 && isWeekday(setYear, 11, 18)) ||
            (diaDay === DiaType.NOV_19 && isWeekday(setYear, 11, 19)) ||
            (diaDay === DiaType.NOV_20 && isWeekday(setYear, 11, 20)) ||
            (diaDay === DiaType.NOV_21 && isWeekday(setYear, 11, 21)) ||
            (diaDay === DiaType.NOV_22 && isWeekday(setYear, 11, 22)) ||
            (diaDay === DiaType.NOV_23 && isWeekday(setYear, 11, 23)) ||
            (diaDay === DiaType.NOV_24 && isWeekday(setYear, 11, 24)) ||
            (diaDay === DiaType.NOV_25 && isWeekday(setYear, 11, 25)) ||
            (diaDay === DiaType.NOV_26 && isWeekday(setYear, 11, 26)) ||
            (diaDay === DiaType.NOV_27 && isWeekday(setYear, 11, 27)) ||
            (diaDay === DiaType.NOV_28 && isWeekday(setYear, 11, 28)) ||
            (diaDay === DiaType.NOV_29 && isWeekday(setYear, 11, 29)) ||
            (diaDay === DiaType.NOV_30 && isWeekday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    return false; // その他の場合
}//エラーの原因は認識されていないダイヤパターン
function changeDiaType() {
    switch (diaDay) {
        case DiaType.WEEKDAY: diaDay = DiaType.HOLIDAY; break;
        case DiaType.HOLIDAY: diaDay = DiaType.OCT_01; break;
        case DiaType.OCT_01: diaDay = DiaType.OCT_02; break;
        case DiaType.OCT_02: diaDay = DiaType.OCT_03; break;
        case DiaType.OCT_03: diaDay = DiaType.OCT_04; break;
        case DiaType.NOV_30: diaDay = DiaType.WEEKDAY; break;
    }

    updateDisplayDiaDay();
    getTimeTable();
    setNewTime(setSecondSum);
    drawTrain();
    resetTimetableSpace();
}





//種別を入れると文字色と背景色を返す
//color=0なら背景色を返す、color=1なら文字色を返す
function getTypeColor(typeName, colorType)
{
	var i;
	for(i=0 ; i<trainTypeColor.length ; i++)
	{
		//alert(typeName+" "+trainTypeColor[i])
		if(typeName == trainTypeColor[i][0])
		{
			if(colorType == 0)
				//背景色を返す
				return trainTypeColor[i][1][0];
			else
				//文字色を返す
				return [i][1][1];
		}
	}
	
}






function HHMMtoSecond(HHMM)
{
	var hour = Math.floor(HHMM / 100);
	var minute = HHMM % 100;
	var second = 0;
	
	return hour * 60 * 60 + minute * 60 + second;
}

function HHMMSSToSecond(hour, minute, second)
{
	return hour * 60 * 60 + minute * 60 + second;
}

function secondToHHMMSS(value)
{
	var hour = Math.floor(value / 3600);
	var minute = Math.floor(value % 3600 / 60);
	var second = Math.floor(value % 60);
	
	return hour + ":" + minute + ":" + second;
}

function secondToHour(value)
{
	var num = Math.floor(value / 3600);
	if(num < 24)
		return num;
	else
		return num - 24;
}

function secondToMinute(value)
{
	return Math.floor(value % 3600 / 60);
}

function secondToSecond(value)
{
	return Math.floor(value % 60);
}
0 likes

2Answer

クリックした時に呼ばれるchangeDiaType関数から、judgeDiaDay関数を呼んでいなさそうです。ご提示のコードでは、judgeDiaDay関数はどこからも呼ばれていないようですが、実際のコードではどこからか呼んでいるのですか?

0Like

Comments

  1. @sembokulove

    Questioner

    お返事遅れて大変申し訳ございません。
    基本的にmainに関しては今あげた部分以外には抜本的には変えていないのですが、
    冒頭部分のコードをご紹介します。
    おそらく上のコードが無視されているのかと思われます。
    あとはおおもとのページをご参照くださいませ。

    function main()
    {
    	//現在時刻を1秒ごとに更新して表示する
    	nowTimeDisplay();
    	judgeDiaDay(); //今日が平日ダイヤか休日ダイヤか
    	setInterval("nowTimeDisplay()",1000);
    	
    	//時刻表データを取得、整える
    	getTimeTable();
    	
    	//現在日時の取得	
    
    	//路線図を描く
    	drawRouteMap();
    	adjustRouteMap();
    	
    	
    	//最初に列車を描くスペースを作っておく
    	makeDrawTrainSpace();
    	
    	
    	//駅から発車する列車の時刻を取得する
    	//getStationTimetable(34);
    	
    	
    	//設定時刻を12時に設定
    	//setSecondSum = 12 * 60 * 60;
    	//設定時刻を表示
    	//document.getElementById("setDateDisplaySpan").innerHTML = "設定日時 " +digitAdjuster(secondToHour(setSecondSum), " ")+":"+digitAdjuster(secondToMinute(setSecondSum), "0")+":"+digitAdjuster(secondToSecond(setSecondSum), "0");	
    	
    	//各列車の在線位置を割り出す
    	//getTrainPosition();
    	
    	//路線図に列車を配置していく
    	//drawTrain();
    	
    	//リアルタイムで表示更新する
    	changeUpdateInterval();
    	
    	//表示枠をウインドウの大きさに合わせる
    	setDisplayArea();
    }
    
    
  2. main関数はページ読み込み時に実行されるのであろうと思うのですが、そうだとすると、「切り替え」ボタンはどのような機能を持っているのですか? judgeDiaDay関数は今日の日付を元に表示を切り替えるのだと思うのですが、「切り替え」ボタンによって別の日付に変更するとか、そういうことですか?

日付の判定ということでしたら、ここで執り行っております。

function judgeDiaDay() {
    let nowDateSet = new Date(); // 現在の日付を取得
    let nowHour = nowDateSet.getHours();
    let nowMinute = nowDateSet.getMinutes();
    let nowSecond = nowDateSet.getSeconds();
    let nowDay = nowDateSet.getDay();
    
    // 現在の年、月、日を取得
    let nowYear = nowDateSet.getFullYear();
    let nowMonth = nowDateSet.getMonth() + 1; // 月は0から始まるため1を加算
    let nowDate = nowDateSet.getDate();

    // 日付変更時刻と現在時刻を比較
    if (HHMMSSToSecond(nowHour, nowMinute, nowSecond) < dayChangeTime) {
        nowDateSet.setDate(nowDateSet.getDate() - 1); // 前日の日付に変更
        nowYear = nowDateSet.getFullYear();
        nowMonth = nowDateSet.getMonth() + 1;
        nowDate = nowDateSet.getDate();
        nowDay = nowDateSet.getDay();
    }

    if (nowYear < 2000) nowYear += 1900; // 年の補正

    setYear = nowYear; // ここでsetYearに現在の年を設定
    setMonth = nowMonth;
    setDate = nowDate;
    setDay = nowDay;


    switch (setMonth) {
        case 10:
            switch (setDate) {
                case 01: diaDay = DiaType.OCT_01; break;
                case 02: diaDay = DiaType.OCT_02; break;
                case 03: diaDay = DiaType.OCT_03; break;
                case 31: diaDay = DiaType.OCT_31; break;
                default: 
                    if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SUNDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.MONDAY;  // 週末の処理
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.TUESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEDNESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.THURSDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.FRIDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SATURDAY;
                    } else if (isWeekend(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEEKEND;  // 週末の処理
                    } else {
                        diaDay = DiaType.HOLIDAY;
                    }
            }
            break;
        case 11:
            switch (setDate) {
                case 01: diaDay = DiaType.NOV_01; break;
                case 02: diaDay = DiaType.NOV_02; break;
                case 03: diaDay = DiaType.NOV_03; break;
                case 30: diaDay = DiaType.NOV_30; break;
                default: 
                    if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SUNDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.MONDAY;  // 週末の処理
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.TUESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEDNESDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.THURSDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.FRIDAY;
                    } else if (dayJudge(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.SATURDAY;
                    } else if (isWeekend(setYear, setMonth, setDate, setDay)) {
                        diaDay = DiaType.WEEKEND;  // 週末の処理
                    } else {
                        diaDay = DiaType.HOLIDAY;
                    }
            }
                break;
            default: 
                diaDay = dayJudge(setYear, setMonth, setDate, setDay) === "weekday" ? DiaType.WEEKDAY : DiaType.HOLIDAY;
    }

    updateDisplayDiaDay();
    return diaDay === DiaType.WEEKDAY;
}```にて、作ったものが呼び起こされるようです。
0Like

Comments

  1. judgeDiaDayはどこから呼ばれているのですか?

Your answer might help someone💌