@sembokulove (Missing place)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

在線ビューワーで指定月以外の平日と土曜休日の判定をしてくれない。

解決したいこと

在線 20251015 Wed スクリーンショット 2025-10-15 170815.png
こちらが現在、指定月以外は常に土曜休日ダイヤとなってしまいます。
平日の時は判定して、平日ダイヤを判定させたいです。
そのために、指定月はきちんとダイヤ判定をしてくれてはいるものの、
他の月で平日ダイヤを表示しません。
例)

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

以上同文

例)

NameError (uninitialized constant World)

先にも挙げました画像の通りです。

該当するソースコード

まずはmainから、

// 曜日を表す列挙型
// 曜日を表す列挙型
// 曜日を表す列挙型
// 曜日を表す列挙型
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,
        WEEKDAY: "weekday",
        HOLIDAY: "holiday",
    };


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;
                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;
                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_01: return "11月01日ダイヤ";
        case DiaType.NOV_02: return "11月02日ダイヤ";
        case DiaType.NOV_03: return "11月03日ダイヤ";
        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_01: return "#f0a0a0"; // 例:2月12日ダイヤの背景色
        case DiaType.NOV_02: return "#a0f0a0"; // 例:2月11日ダイヤの背景色
        case DiaType.NOV_03: return "#f0a0a0"; // 例:2月12日ダイヤの背景色
        default: return "";
    }
}


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

function isSunday(year, month, date) {
  return window.isHolidayOrSunday(year, month, date); // windowを付けて呼び出す
}
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.NOV_30 && isWeekday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if ((value === "休日")||(value === "休日運転")) {
        if ((diaDay === DiaType.HOLIDAY)||
           ((diaDay === DiaType.OCT_01 && isSunday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isSunday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isSunday(setYear, 10, 3)) ||
以下略
            (diaDay === DiaType.NOV_30 && isSunday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if (value === "休日運休") {
        if ((diaDay === DiaType.WEEKDAY)||
           ((diaDay === DiaType.OCT_01 && !isSunday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && !isSunday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && !isSunday(setYear, 10, 3)) ||
以下略
            (diaDay === DiaType.NOV_30 && !isSunday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if (value === "土曜・休日") {
        if (((diaDay === DiaType.HOLIDAY))||
           ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
以下略
            (diaDay === DiaType.NOV_30 && isHoliday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
if (value === "10月9・12・31日・11月3・21・24日運転") {
   if(!(diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY)&&
       (diaDay === DiaType.OCT_09 ||
        diaDay === DiaType.OCT_12 ||
        diaDay === DiaType.OCT_31 ||
        diaDay === DiaType.NOV_03 ||
        diaDay === DiaType.NOV_21 ||
        diaDay === DiaType.NOV_24)) {
        return true; // 水曜日運休の場合
    }
}

if (value === "10月12日・11月3・24日運転" && 
     (diaDay === DiaType.OCT_12 || 
      diaDay === DiaType.NOV_03 || 
      diaDay === DiaType.NOV_24)) {
    return true;
}

if (value === "10月9・12・31日・11月3・21・24日運休") {
    if  ((diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY) ||
       !(diaDay === DiaType.OCT_09||
        diaDay === DiaType.OCT_12||
        diaDay === DiaType.OCT_31||
        diaDay === DiaType.NOV_03||
        diaDay === DiaType.NOV_21||
        diaDay === DiaType.NOV_24)) {
        return true; // 水曜日運休の場合
    }
}
    if (value === "10月10→12日・11月1→3日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
        (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
    if (value === "10月10→12日・11月1→3・22→24日運転" &&((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
        (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_22)||(diaDay === DiaType.NOV_23)||(diaDay === DiaType.NOV_24)))
        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 trainTypeColor[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);
}

そしてdiatypejudgeです。

(function() { // Start of the IIFE

    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,
        WEEKDAY: "weekday",
        HOLIDAY: "holiday",
    };

    // getNthDayOfMonth などの関数は変更なしで存置
    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 { month: targetDate.getMonth() + 1, date: targetDate.getDate() };
        }
        return null;
    }

    function calculateVernalEquinox(year) {
        let day = 20;
        if (year % 4 === 0 && year >= 2000 && year <= 2099) {
            day = 20;
        } else {
            day = 21;
        }
        if (year === 2092 || year === 2096) day = 19;
        if (year === 2056 || year === 2060 || year === 2064 || year === 2068 || year === 2072 || year === 2076 || year === 2080 || year === 2084 || year === 2088) day = 20;

        return new Date(year, 2, day);
    }

    function calculateAutumnalEquinox(year) {
        let day = 23;
        if (year % 4 === 0 && year >= 2000 && year <= 2099) {
            day = 23;
        } else {
            day = 23;
        }
        if (year === 2012 || year === 2016 || year === 2020 || year === 2024 || year === 2028) day = 22;

        return new Date(year, 8, day);
    }

    // 固定の祝日リストを定義
    const fixedHolidays = [
        // 月は0-indexedで指定
        { month: 1, date: 1, name: "元日" },
        { month: 2, date: 11, name: "建国記念の日" },
        { month: 2, date: 23, name: "天皇誕生日" },
        { month: 4, date: 29, name: "昭和の日" },
        { month: 5, date: 3, name: "憲法記念日" },
        { month: 5, date: 4, name: "みどりの日" },
        { month: 5, date: 5, name: "こどもの日" },
        { month: 7, date: 20, name: "海の日" }, // 2024年の海の日 例
        { month: 7, date: 11, name: "山の日" },
        { month: 11, date: 3, name: "文化の日" },
        { month: 11, date: 23, name: "勤労感謝の日" },
        // 必要に応じて他の固定祝日を追加
    ];

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

        // ハッピーマンデー制度に基づく祝日
        dynamicHolidays.push(getNthDayOfMonth(year, 1, DayOfWeek.MONDAY, 2)); // 成人の日 (1月第2月曜日)
        dynamicHolidays.push(getNthDayOfMonth(year, 7, DayOfWeek.MONDAY, 3)); // 海の日 (7月第3月曜日)
        dynamicHolidays.push(getNthDayOfMonth(year, 9, DayOfWeek.MONDAY, 3)); // 敬老の日 (9月第3月曜日)
        dynamicHolidays.push(getNthDayOfMonth(year, 10, DayOfWeek.MONDAY, 2)); // スポーツの日 (10月第2月曜日)

        // 春分の日
        const equinoxSpring = calculateVernalEquinox(year);
        if (equinoxSpring) {
            dynamicHolidays.push({ month: equinoxSpring.getMonth() + 1, date: equinoxSpring.getDate() });
        }
        // 秋分の日
        const equinoxAutumn = calculateAutumnalEquinox(year);
        if (equinoxAutumn) {
            dynamicHolidays.push({ month: equinoxAutumn.getMonth() + 1, date: equinoxAutumn.getDate() });
        }

        return dynamicHolidays.filter(h => h !== null);
    }

    // 祝日か日曜日かを判定する関数 (既存のまま)
    function isHolidayOrSunday(year, month, date) {
        const dateObj = new Date(year, month - 1, date);
        const dayOfWeek = dateObj.getDay();

        if (dayOfWeek === DayOfWeek.SUNDAY) {
            return true;
        }

        const allHolidaysForYear = [
            ...fixedHolidays,
            ...getJapaneseHolidays(year)
        ];

        const isRecognizedHoliday = allHolidaysForYear.some(holiday =>
            holiday.month === month && holiday.date === date
        );
        if (isRecognizedHoliday) {
            return true;
        }

        // 振替休日判定
        if (dayOfWeek === DayOfWeek.MONDAY) {
            const previousDay = new Date(year, month - 1, date - 1);
            const prevDayYear = previousDay.getFullYear();
            const prevDayMonth = previousDay.getMonth() + 1;
            const prevDayDate = previousDay.getDate();

            if (previousDay.getDay() === DayOfWeek.SUNDAY) { // 前日が日曜日の場合のみ振替対象
                const isPreviousDayRecognizedHoliday = allHolidaysForYear.some(holiday =>
                    holiday.month === prevDayMonth && holiday.date === prevDayDate
                );
                if (isPreviousDayRecognizedHoliday) {
                    return true;
                }
            }
        }
        return false;
    }

    // 祝日または週末かを判定する関数 (既存のまま)
    function isHolidayOrWeekend(year, month, date) {
        const dateObj = new Date(year, month - 1, date);
        const dayOfWeek = dateObj.getDay();

        if ((dayOfWeek === DayOfWeek.SUNDAY)|| (dayOfWeek === DayOfWeek.SATURDAY)){
            return true;
        }

        const allHolidaysForYear = [
            ...fixedHolidays,
            ...getJapaneseHolidays(year)
        ];

        const isRecognizedHoliday = allHolidaysForYear.some(holiday =>
            holiday.month === month && holiday.date === date
        );
        if (isRecognizedHoliday) {
            return true;
        }

        // 振替休日判定
        if (dayOfWeek === DayOfWeek.MONDAY) {
            const previousDay = new Date(year, month - 1, date - 1);
            const prevDayYear = previousDay.getFullYear();
            const prevDayMonth = previousDay.getMonth() + 1;
            const prevDayDate = previousDay.getDate();

            if (previousDay.getDay() === DayOfWeek.SUNDAY) {
                const isPreviousDayRecognizedHoliday = allHolidaysForYear.some(holiday =>
                    holiday.month === prevDayMonth && holiday.date === prevDayDate
                );
                if (isPreviousDayRecognizedHoliday) {
                    return true;
                }
            }
        }
        return false;
    }

    const dayJudge = (year, month, date) => {
        const d = new Date(year, month, date);
        const dayOfWeek = d.getDay(); // 0 for Sunday, 1 for Monday, ..., 6 for Saturday

        // Check for specific dates first (e.g., OCT_XX, NOV_XX, etc.)
        switch (month) { // month is 0-indexed
            case 9: // October (0-indexed: 9)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`OCT_${paddedDate}`] !== undefined) {
                        return DiaType[`OCT_${paddedDate}`];
                    }
                }
                break;
            case 10: // November (0-indexed: 10)
                if (date >= 1 && date <= 30) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`NOV_${paddedDate}`] !== undefined) {
                        return DiaType[`NOV_${paddedDate}`];
                    }
                }
                break;
            case 11: // December (0-indexed: 11)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`DEC_${paddedDate}`] !== undefined) {
                        return DiaType[`DEC_${paddedDate}`];
                    }
                }
                break;
            case 0: // January (0-indexed: 0)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`JAN_${paddedDate}`] !== undefined) {
                        return DiaType[`JAN_${paddedDate}`];
                    }
                }
                break;
            case 1: // February (0-indexed: 1)
                if (date >= 1 && date <= 29) { // Consider leap year
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`FEB_${paddedDate}`] !== undefined) {
                        return DiaType[`FEB_${paddedDate}`];
                    }
                }
                break;
            case 2: // March (0-indexed: 2)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`MAR_${paddedDate}`] !== undefined) {
                        return DiaType[`MAR_${paddedDate}`];
                    }
                }
                break;
            case 3: // April (0-indexed: 3)
                if (date >= 1 && date <= 30) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`APR_${paddedDate}`] !== undefined) {
                        return DiaType[`APR_${paddedDate}`];
                    }
                }
                break;
            case 4: // May (0-indexed: 4)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`MAY_${paddedDate}`] !== undefined) {
                        return DiaType[`MAY_${paddedDate}`];
                    }
                }
                break;
            case 5: // June (0-indexed: 5)
                if (date >= 1 && date <= 30) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`JUN_${paddedDate}`] !== undefined) {
                        return DiaType[`JUN_${paddedDate}`];
                    }
                }
                break;
            case 6: // July (0-indexed: 6)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`JUL_${paddedDate}`] !== undefined) {
                        return DiaType[`JUL_${paddedDate}`];
                    }
                }
                break;
            case 7: // August (0-indexed: 7)
                if (date >= 1 && date <= 31) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`AUG_${paddedDate}`] !== undefined) {
                        return DiaType[`AUG_${paddedDate}`];
                    }
                }
                break;
            case 8: // September (0-indexed: 8)
                if (date >= 1 && date <= 30) {
                    const paddedDate = String(date).padStart(2, '0');
                    if (DiaType[`SEP_${paddedDate}`] !== undefined) {
                        return DiaType[`SEP_${paddedDate}`];
                    }
                }
                break;
            default:
                break;
        }

        if (isHolidayOrSunday(year, month, date)) {
            return DiaType.SUNDAY;
        } else if (dayOfWeek === DayOfWeek.SATURDAY) { // 土曜日であるかを確認
            return DiaType.SATURDAY;
        } else {
            return DiaType.WEEKDAY;
        }
    }; // <--- ここに dayJudge 関数の閉じカッコがあります。これより後ろに余分なカッコがないか確認してください。

    // To make dayJudge and isHolidayOrSunday accessible from your "main" script,
    // you need to attach them to the global window object.
    window.dayJudge = dayJudge;
    window.isHolidayOrSunday = isHolidayOrSunday;
    window.isHolidayOrWeekend = isHolidayOrWeekend;
})(); // End of the IIFE

例)

def greet
  puts Hello World
end

自分で試したこと

ちなみに元ネタはここです。
http://r113.web.fc2.com/p/viewer/jrw-hokuriku-20150314/index.html
ここに問題・エラーに対して試したことを記載してください。
自分で臨んだエラー対策ですが、const diatypeが違うのかと、
生成AIサイトのgeminiで聞きましたが、
それでは改善しませんでした。
思い当たる節が見当たらないので、ここでのご返答をお待ちしております。
なにとぞご理解賜りますようお願い申し上げます。

0 likes

1Answer

補足願います。
『指定月以外は常に土曜休日ダイヤとなってしまいます』とのことですが、どのような動作を確認して「常に土曜休日ダイヤ」であると思ったのですか? 具体的な現象をご提示いただけますか?

0Like

Comments

  1. @sembokulove

    Questioner

    function judgeDiaDay()の項目を見ていただくと分かりやすいのですが、
    switch文の二重のcase文のうち、外側の10が10月を意味しています。
    すなわち、外側のcaseが月、内側のcaseが日付です。
    これにより、10~11月ダイヤは正常に作動するようになっております。
    ところが、こちらを10→1などほかの月にすると、
    必ず、土曜休日ダイヤしか判定をしなくなります。
    これは要するに、10~11月では日割りごとの時刻は動作はしますが、
    それ以外では問答無用で土曜休日が返されるという意味です。

  2. では、その部分を書き換えればいいのではないか、と思うのですが、それはすでに試されていますでしょうか?

  3. ざっくり見た感じ、if (dayJudge(setYear, setMonth, setDate, setDay))とあるので真偽値型を期待してそうなところ、dayJudge(setYear, setMonth, setDate, setDay) === "weekday" ?と文字列型を期待しているコードもあり、dayJudgeの戻り値が期待しているものと違うのではないかな?、という気分になりました。

  4. @sembokulove

    Questioner

    function judgeDiaDay() {の件ですが、
    case10と11のdefaultとそれ以外の部分のdefaultをどちらか一方に合わせることはした(つまり、最後のdefaultを
    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;
    }
    にしたり、
    case10、11のdefaultを
    diaDay = dayJudge(setYear, setMonth, setDate, setDay) === "weekday" ? DiaType.WEEKDAY : DiaType.HOLIDAY;
    にしてそろえる)
    事は試しましたが、いずれにせよ、土曜祝日が表示されてしまいます。

  5. すでに書きましたが、dayJudgeの戻り値が想定と違うのかもしれません。

    dayJudgeのコードを見ると、DiaTypeを参照して戻しているようなのですが、DiaTypeの定義は提示されていませんので、こちらからは想像することしかできません。ご自身で確認してみるのが早いでしょう。おそらくですが、DiaTypeというオブジェクトが想定と違う定義がされているのではないかと思います。

  6. @sembokulove

    Questioner

    diatypeの定義は
    以下の通りとなります。
    const DiaType = {
    OCT_01: 0,
    OCT_02: 1,
    OCT_03: 2,
    OCT_04: 3,
    OCT_05: 4,
    OCT_06: 5,
    OCT_07: 6,
    OCT_08: 7,
    OCT_09: 8,
    OCT_10: 9,
    OCT_11: 10,
    OCT_12: 11,
    OCT_13: 12,
    OCT_14: 13,
    OCT_15: 14,
    OCT_16: 15,
    OCT_17: 16,
    OCT_18: 17,
    OCT_19: 18,
    OCT_20: 19,
    OCT_21: 20,
    OCT_22: 21,
    OCT_23: 22,
    OCT_24: 23,
    OCT_25: 24,
    OCT_26: 25,
    OCT_27: 26,
    OCT_28: 27,
    OCT_29: 28,
    OCT_30: 29,
    OCT_31: 30,
    NOV_01: 31,
    NOV_02: 32,
    NOV_03: 33,
    NOV_04: 34,
    NOV_05: 35,
    NOV_06: 36,
    NOV_07: 37,
    NOV_08: 38,
    NOV_09: 39,
    NOV_10: 40,
    NOV_11: 41,
    NOV_12: 42,
    NOV_13: 43,
    NOV_14: 44,
    NOV_15: 45,
    NOV_16: 46,
    NOV_17: 47,
    NOV_18: 48,
    NOV_19: 49,
    NOV_20: 50,
    NOV_21: 51,
    NOV_22: 52,
    NOV_23: 53,
    NOV_24: 54,
    NOV_25: 55,
    NOV_26: 56,
    NOV_27: 57,
    NOV_28: 58,
    NOV_29: 59,
    NOV_30: 60,
    WEEKDAY: "weekday",
    HOLIDAY: "holiday",
    };

  7. ご提示ありがとうございます。やはり真偽値型も文字列型も返さないようですね。
    例を挙げれば、1月30日の場合はJAN_30を参照するはずですが、その定義がないのでdayJudgeundefinedを返します。

    とすると、if (dayJudge(setYear, setMonth, setDate, setDay))dayJudge(setYear, setMonth, setDate, setDay) === "weekday"falseですから、想定と違うのではありませんか。
    たとえば、dayJudge(2026,0,30)は2026年1月30日金曜日ですが、この呼び出しに対してどのような戻り値が欲しいのか、よく検討された方がいいかと思います。

  8. @sembokulove

    Questioner

    二つ質問がございます。
    一つは、case10とcase11とそれ以外の場合のdefaultのパターンは、
    すなわち、10月と11月とそれ以外では、統一した方がよいのでしょうか。
    もう一つは、戻り値を変更した場合の影響です。
    この場合、10月と11月の戻り値は年によって毎年変動します。
    当たり前と言えば当たり前なのですが、
    1年は7では割り切れないからです。
    そのために、その年ごとに合わせたダイヤ設定が必要で、
    逆に言えば、10月1日を月曜日に設定する必要はないのです。
    ただし、この場合weekdayにすると、
    曜日を指定した場合の運転は、例えば水曜日運転の列車はどのように影響しますか。
    もし影響がないのであれば、weekdayとholidayで分けることは、コードの簡略化に貢献します。
    仮に影響があった場合、曜日ごとの戻り値を期待申し上げます。

  9. ひとつ目については、それぞれのdefault節の処理が共通しているかによります。現在は共通した処理でも、本質的には別の処理である場合は別に書いた方がよい場合もあるでしょう。
    二つ目については、水曜運休の処理がjudgeTrainRunningDayの中にdiaDayに依存せずに書かれているようですから、その部分に関しては影響は出ないような気がします。他にあるかどうかはちょっとわからないです。

  10. @sembokulove

    Questioner

    現状では、10月・11月の日付ごとの処理は可能ですので、こちらに関しては、
    日付ごとの処理10月1日のダイヤパターン、2日のダイヤパターン、3日のダイヤパターンが処理できています。
    逆に10月1日→月曜日としてしまいますと、その次の年の挙動がおかしくなるため、
    そういう設定は想定しておりません。
    ただ、気になるのは10月・11月では、土曜・祝日の設定は、
    function isHoliday(year, month, date) {
    return window.isHolidayOrWeekend(year, month, date);
    }
    function isWeekday(year, month, day) {
    const dayOfWeek = new Date(year, month - 1, day).getDay();
    return dayOfWeek >= 1 && dayOfWeek <= 5;
    }

    function isSunday(year, month, date) {
    return window.isHolidayOrSunday(year, month, date); // windowを付けて呼び出す
    }
    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 judgeDiaDay() 内のswitch文あるいは、
    const diatypeには影響しますでしょうか。

  11. その関数群がどこで使われているのか提示されていないので、私から言えることはなさそうです。

  12. @sembokulove

    Questioner

    少々長くなりますが、よろしいでしょうか。
    おそらく以下のことかと思われます。
    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.NOV_30 && isWeekday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if ((value === "休日")||(value === "休日運転")) {
        if ((diaDay === DiaType.HOLIDAY)||
           ((diaDay === DiaType.OCT_01 && isSunday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isSunday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isSunday(setYear, 10, 3)) ||
    
            (diaDay === DiaType.NOV_30 && isSunday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if (value === "休日運休") {
        if ((diaDay === DiaType.WEEKDAY)||
           ((diaDay === DiaType.OCT_01 && !isSunday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && !isSunday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && !isSunday(setYear, 10, 3)) ||
    
            (diaDay === DiaType.NOV_30 && !isSunday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    if (value === "土曜・休日") {
        if (((diaDay === DiaType.HOLIDAY))||
           ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
    
            (diaDay === DiaType.NOV_30 && isHoliday(setYear, 11, 30)))) {
                return true; // 水曜日運休の場合
        }
    }
    

    if (value === "10月9・12・31日・11月3・21・24日運転") {
    if(!(diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY)&&
    (diaDay === DiaType.OCT_09 ||
    diaDay === DiaType.OCT_12 ||
    diaDay === DiaType.OCT_31 ||
    diaDay === DiaType.NOV_03 ||
    diaDay === DiaType.NOV_21 ||
    diaDay === DiaType.NOV_24)) {
    return true; // 水曜日運休の場合
    }
    }

    if (value === "10月12日・11月3・24日運転" &&
    (diaDay === DiaType.OCT_12 ||
    diaDay === DiaType.NOV_03 ||
    diaDay === DiaType.NOV_24)) {
    return true;
    }

    if (value === "10月9・12・31日・11月3・21・24日運休") {
    if ((diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY) ||
    !(diaDay === DiaType.OCT_09||
    diaDay === DiaType.OCT_12||
    diaDay === DiaType.OCT_31||
    diaDay === DiaType.NOV_03||
    diaDay === DiaType.NOV_21||
    diaDay === DiaType.NOV_24)) {
    return true; // 水曜日運休の場合
    }
    }
    if (value === "10月10→12日・11月1→3日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
    (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
    if (value === "10月10→12日・11月1→3・22→24日運転" &&((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
    (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_22)||(diaDay === DiaType.NOV_23)||(diaDay === DiaType.NOV_24)))
    return true;
    if (value === "10月1日→11月28日運転" &&
    ((diaDay === DiaType.OCT_01) || (diaDay === DiaType.OCT_02) || (diaDay === DiaType.OCT_03) ||
    (diaDay === DiaType.OCT_04) || (diaDay === DiaType.OCT_05) || (diaDay === DiaType.OCT_06) ||
    (diaDay === DiaType.OCT_07) || (diaDay === DiaType.OCT_08) || (diaDay === DiaType.OCT_09) ||
    (diaDay === DiaType.OCT_10) || (diaDay === DiaType.OCT_11) || (diaDay === DiaType.OCT_12) ||
    (diaDay === DiaType.OCT_13) || (diaDay === DiaType.OCT_14) || (diaDay === DiaType.OCT_15) ||
    (diaDay === DiaType.OCT_16) || (diaDay === DiaType.OCT_17) || (diaDay === DiaType.OCT_18) ||
    (diaDay === DiaType.OCT_19) || (diaDay === DiaType.OCT_20) || (diaDay === DiaType.OCT_21) ||
    (diaDay === DiaType.OCT_22) || (diaDay === DiaType.OCT_23) || (diaDay === DiaType.OCT_24) ||
    (diaDay === DiaType.OCT_25) || (diaDay === DiaType.OCT_26) || (diaDay === DiaType.OCT_27) ||
    (diaDay === DiaType.OCT_28) || (diaDay === DiaType.OCT_29) || (diaDay === DiaType.OCT_30) ||
    (diaDay === DiaType.OCT_31) ||
    (diaDay === DiaType.NOV_01) || (diaDay === DiaType.NOV_02) || (diaDay === DiaType.NOV_03) ||
    (diaDay === DiaType.NOV_04) || (diaDay === DiaType.NOV_05) || (diaDay === DiaType.NOV_06) ||
    (diaDay === DiaType.NOV_07) || (diaDay === DiaType.NOV_08) || (diaDay === DiaType.NOV_09) ||
    (diaDay === DiaType.NOV_10) || (diaDay === DiaType.NOV_11) || (diaDay === DiaType.NOV_12) ||
    (diaDay === DiaType.NOV_13) || (diaDay === DiaType.NOV_14) || (diaDay === DiaType.NOV_15) ||
    (diaDay === DiaType.NOV_16) || (diaDay === DiaType.NOV_17) || (diaDay === DiaType.NOV_18) ||
    (diaDay === DiaType.NOV_19) || (diaDay === DiaType.NOV_20) || (diaDay === DiaType.NOV_21) ||
    (diaDay === DiaType.NOV_22) || (diaDay === DiaType.NOV_23) || (diaDay === DiaType.NOV_24) ||
    (diaDay === DiaType.NOV_25) || (diaDay === DiaType.NOV_26) || (diaDay === DiaType.NOV_27) ||
    (diaDay === DiaType.NOV_28))) return true;

    if (value === "10月1日→11月28日運休" &&
    (((diaDay === DiaType.WEEKDAY) || (diaDay === DiaType.HOLIDAY)) ||
    ((diaDay === DiaType.NOV_29) || (diaDay === DiaType.NOV_30)))) return true;
    if (value === "10月1日→11月16日運転" && ((diaDay === DiaType.OCT_01)||(diaDay === DiaType.OCT_02)||(diaDay === DiaType.OCT_03)||(diaDay === DiaType.OCT_04)||(diaDay === DiaType.OCT_05)||
    (diaDay === DiaType.OCT_06)||(diaDay === DiaType.OCT_07)||(diaDay === DiaType.OCT_08)||(diaDay === DiaType.OCT_09)||(diaDay === DiaType.OCT_10)||
    (diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||(diaDay === DiaType.OCT_13)||(diaDay === DiaType.OCT_14)||(diaDay === DiaType.OCT_15)||
    (diaDay === DiaType.OCT_16)||(diaDay === DiaType.OCT_17)||(diaDay === DiaType.OCT_18)||(diaDay === DiaType.OCT_19)||(diaDay === DiaType.OCT_20)||
    (diaDay === DiaType.OCT_21)||(diaDay === DiaType.OCT_22)||(diaDay === DiaType.OCT_23)||(diaDay === DiaType.OCT_24)||(diaDay === DiaType.OCT_25)||
    (diaDay === DiaType.OCT_26)||(diaDay === DiaType.OCT_27)||(diaDay === DiaType.OCT_28)||(diaDay === DiaType.OCT_29)||(diaDay === DiaType.OCT_30)||
    (diaDay === DiaType.OCT_31)||
    (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_04)||(diaDay === DiaType.NOV_05)||
    (diaDay === DiaType.NOV_06)||(diaDay === DiaType.NOV_07)||(diaDay === DiaType.NOV_08)||(diaDay === DiaType.NOV_09)||(diaDay === DiaType.NOV_10)||
    (diaDay === DiaType.NOV_11)||(diaDay === DiaType.NOV_12)||(diaDay === DiaType.NOV_13)||(diaDay === DiaType.NOV_14)||(diaDay === DiaType.NOV_15)||
    (diaDay === DiaType.NOV_16))) return true;
    if (value === "11月2・3日運転" && ((diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
    if (value === "10月10・12日・11月1・3・21・23日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_12)||
    (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_03)||
    (diaDay === DiaType.NOV_21)||(diaDay === DiaType.NOV_23))) return true;
    if (value === "10月4・5・18・19日運転" && ((diaDay === DiaType.OCT_04)||(diaDay === DiaType.OCT_05)||
    (diaDay === DiaType.OCT_18)||(diaDay === DiaType.OCT_19))) return true;
    if (value === "10月25・26日・11月8・9・15・16日運転" && ((diaDay === DiaType.OCT_25)||(diaDay === DiaType.OCT_26)||
    (diaDay === DiaType.NOV_08)||(diaDay === DiaType.NOV_09)||(diaDay === DiaType.NOV_15)||(diaDay === DiaType.NOV_16))) return true;
    if (value === "11月1→3日運転" && ((diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
    if (value === "10月12日・11月3日運転" && ((diaDay === DiaType.OCT_12)||(diaDay === DiaType.NOV_03))) return true;
    if (value === "10月10→13日・11月1→4日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||(diaDay === DiaType.OCT_13)||
    (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_04))) return true;
    if (value === "10月1日→11月24日の土曜・休日運転") {
    if ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
    (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
    (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
    (diaDay === DiaType.NOV_24 && isHoliday(setYear, 11, 24))) {
    return true; // 水曜日運休の場合
    }
    }
    if (value === "10月3・9・10・17・24日・31日・11月1日運転" && ((diaDay === DiaType.OCT_03)||
    (diaDay === DiaType.OCT_09)||(diaDay === DiaType.OCT_10)||
    (diaDay === DiaType.OCT_17)||(diaDay === DiaType.OCT_24)||(diaDay === DiaType.OCT_31)||
    (diaDay === DiaType.NOV_01))) return true;
    if (value === "10月8・9・13→31日・11月4→26日の水曜日運転") {
    if ((diaDay === DiaType.OCT_08 && isWednesday(setYear, 10, 8)) ||
    (diaDay === DiaType.OCT_09 && isWednesday(setYear, 10, 9)) ||
    (diaDay === DiaType.OCT_13 && isWednesday(setYear, 10, 13)) ||
    (diaDay === DiaType.OCT_14 && isWednesday(setYear, 10, 14)) ||
    (diaDay === DiaType.OCT_15 && isWednesday(setYear, 10, 15)) ||
    (diaDay === DiaType.OCT_16 && isWednesday(setYear, 10, 16)) ||
    (diaDay === DiaType.OCT_17 && isWednesday(setYear, 10, 17)) ||
    (diaDay === DiaType.OCT_18 && isWednesday(setYear, 10, 18)) ||
    (diaDay === DiaType.OCT_19 && isWednesday(setYear, 10, 19)) ||
    (diaDay === DiaType.OCT_20 && isWednesday(setYear, 10, 20)) ||
    (diaDay === DiaType.OCT_21 && isWednesday(setYear, 10, 21)) ||
    (diaDay === DiaType.OCT_22 && isWednesday(setYear, 10, 22)) ||
    (diaDay === DiaType.OCT_23 && isWednesday(setYear, 10, 23)) ||
    (diaDay === DiaType.OCT_24 && isWednesday(setYear, 10, 24)) ||
    (diaDay === DiaType.OCT_25 && isWednesday(setYear, 10, 25)) ||
    (diaDay === DiaType.OCT_26 && isWednesday(setYear, 10, 26)) ||
    (diaDay === DiaType.OCT_27 && isWednesday(setYear, 10, 27)) ||
    (diaDay === DiaType.OCT_28 && isWednesday(setYear, 10, 28)) ||
    (diaDay === DiaType.OCT_29 && isWednesday(setYear, 10, 29)) ||
    (diaDay === DiaType.OCT_30 && isWednesday(setYear, 10, 30)) ||
    (diaDay === DiaType.OCT_31 && isWednesday(setYear, 10, 31)) ||
    (diaDay === DiaType.NOV_04 && isWednesday(setYear, 11, 4)) ||
    (diaDay === DiaType.NOV_05 && isWednesday(setYear, 11, 5)) ||
    (diaDay === DiaType.NOV_06 && isWednesday(setYear, 11, 6)) ||
    (diaDay === DiaType.NOV_07 && isWednesday(setYear, 11, 7)) ||
    (diaDay === DiaType.NOV_08 && isWednesday(setYear, 11, 8)) ||
    (diaDay === DiaType.NOV_09 && isWednesday(setYear, 11, 9)) ||
    (diaDay === DiaType.NOV_10 && isWednesday(setYear, 11, 10)) ||
    (diaDay === DiaType.NOV_11 && isWednesday(setYear, 11, 11)) ||
    (diaDay === DiaType.NOV_12 && isWednesday(setYear, 11, 12)) ||
    (diaDay === DiaType.NOV_13 && isWednesday(setYear, 11, 13)) ||
    (diaDay === DiaType.NOV_14 && isWednesday(setYear, 11, 14)) ||
    (diaDay === DiaType.NOV_15 && isWednesday(setYear, 11, 15)) ||
    (diaDay === DiaType.NOV_16 && isWednesday(setYear, 11, 16)) ||
    (diaDay === DiaType.NOV_17 && isWednesday(setYear, 11, 17)) ||
    (diaDay === DiaType.NOV_18 && isWednesday(setYear, 11, 18)) ||
    (diaDay === DiaType.NOV_19 && isWednesday(setYear, 11, 19)) ||
    (diaDay === DiaType.NOV_20 && isWednesday(setYear, 11, 20)) ||
    (diaDay === DiaType.NOV_21 && isWednesday(setYear, 11, 21)) ||
    (diaDay === DiaType.NOV_22 && isWednesday(setYear, 11, 22)) ||
    (diaDay === DiaType.NOV_23 && isWednesday(setYear, 11, 23)) ||
    (diaDay === DiaType.NOV_24 && isWednesday(setYear, 11, 24)) ||
    (diaDay === DiaType.NOV_25 && isWednesday(setYear, 11, 25)) ||
    (diaDay === DiaType.NOV_26 && isWednesday(setYear, 11, 26))) {
    return true; // 水曜日運休の場合
    }
    }
    if (value === "10月8・9・13→31日・11月4→26日の水曜日運休") {
    if ((diaDay === DiaType.OCT_08 && !isWednesday(setYear, 10, 8)) ||
    (diaDay === DiaType.OCT_09 && !isWednesday(setYear, 10, 9)) ||
    (diaDay === DiaType.OCT_13 && !isWednesday(setYear, 10, 13)) ||
    (diaDay === DiaType.OCT_14 && !isWednesday(setYear, 10, 14)) ||
    (diaDay === DiaType.OCT_15 && !isWednesday(setYear, 10, 15)) ||
    (diaDay === DiaType.OCT_16 && !isWednesday(setYear, 10, 16)) ||
    (diaDay === DiaType.OCT_17 && !isWednesday(setYear, 10, 17)) ||
    (diaDay === DiaType.OCT_18 && !isWednesday(setYear, 10, 18)) ||
    (diaDay === DiaType.OCT_19 && !isWednesday(setYear, 10, 19)) ||
    (diaDay === DiaType.OCT_20 && !isWednesday(setYear, 10, 20)) ||
    (diaDay === DiaType.OCT_21 && !isWednesday(setYear, 10, 21)) ||
    (diaDay === DiaType.OCT_22 && !isWednesday(setYear, 10, 22)) ||
    (diaDay === DiaType.OCT_23 && !isWednesday(setYear, 10, 23)) ||
    (diaDay === DiaType.OCT_24 && !isWednesday(setYear, 10, 24)) ||
    (diaDay === DiaType.OCT_25 && !isWednesday(setYear, 10, 25)) ||
    (diaDay === DiaType.OCT_26 && !isWednesday(setYear, 10, 26)) ||
    (diaDay === DiaType.OCT_27 && !isWednesday(setYear, 10, 27)) ||
    (diaDay === DiaType.OCT_28 && !isWednesday(setYear, 10, 28)) ||
    (diaDay === DiaType.OCT_29 && !isWednesday(setYear, 10, 29)) ||
    (diaDay === DiaType.OCT_30 && !isWednesday(setYear, 10, 30)) ||
    (diaDay === DiaType.OCT_31 && !isWednesday(setYear, 10, 31)) ||
    (diaDay === DiaType.NOV_04 && !isWednesday(setYear, 11, 4)) ||
    (diaDay === DiaType.NOV_05 && !isWednesday(setYear, 11, 5)) ||
    (diaDay === DiaType.NOV_06 && !isWednesday(setYear, 11, 6)) ||
    (diaDay === DiaType.NOV_07 && !isWednesday(setYear, 11, 7)) ||
    (diaDay === DiaType.NOV_08 && !isWednesday(setYear, 11, 8)) ||
    (diaDay === DiaType.NOV_09 && !isWednesday(setYear, 11, 9)) ||
    (diaDay === DiaType.NOV_10 && !isWednesday(setYear, 11, 10)) ||
    (diaDay === DiaType.NOV_11 && !isWednesday(setYear, 11, 11)) ||
    (diaDay === DiaType.NOV_12 && !isWednesday(setYear, 11, 12)) ||
    (diaDay === DiaType.NOV_13 && !isWednesday(setYear, 11, 13)) ||
    (diaDay === DiaType.NOV_14 && !isWednesday(setYear, 11, 14)) ||
    (diaDay === DiaType.NOV_15 && !isWednesday(setYear, 11, 15)) ||
    (diaDay === DiaType.NOV_16 && !isWednesday(setYear, 11, 16)) ||
    (diaDay === DiaType.NOV_17 && !isWednesday(setYear, 11, 17)) ||
    (diaDay === DiaType.NOV_18 && !isWednesday(setYear, 11, 18)) ||
    (diaDay === DiaType.NOV_19 && !isWednesday(setYear, 11, 19)) ||
    (diaDay === DiaType.NOV_20 && !isWednesday(setYear, 11, 20)) ||
    (diaDay === DiaType.NOV_21 && !isWednesday(setYear, 11, 21)) ||
    (diaDay === DiaType.NOV_22 && !isWednesday(setYear, 11, 22)) ||
    (diaDay === DiaType.NOV_23 && !isWednesday(setYear, 11, 23)) ||
    (diaDay === DiaType.NOV_24 && !isWednesday(setYear, 11, 24)) ||
    (diaDay === DiaType.NOV_25 && !isWednesday(setYear, 11, 25)) ||
    (diaDay === DiaType.NOV_26 && !isWednesday(setYear, 11, 26))) {
    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.OCT_04: diaDay = DiaType.OCT_05; break;
    case DiaType.OCT_05: diaDay = DiaType.OCT_06; break;
    case DiaType.OCT_06: diaDay = DiaType.OCT_07; break;
    case DiaType.OCT_07: diaDay = DiaType.OCT_08; break;
    case DiaType.OCT_08: diaDay = DiaType.OCT_09; break;
    case DiaType.OCT_09: diaDay = DiaType.OCT_10; break;
    case DiaType.OCT_10: diaDay = DiaType.OCT_11; break;
    case DiaType.OCT_11: diaDay = DiaType.OCT_12; break;
    case DiaType.OCT_12: diaDay = DiaType.OCT_13; break;
    case DiaType.OCT_13: diaDay = DiaType.OCT_14; break;
    case DiaType.OCT_14: diaDay = DiaType.OCT_15; break;
    case DiaType.OCT_15: diaDay = DiaType.OCT_16; break;
    case DiaType.OCT_16: diaDay = DiaType.OCT_17; break;
    case DiaType.OCT_17: diaDay = DiaType.OCT_18; break;
    case DiaType.OCT_18: diaDay = DiaType.OCT_19; break;
    case DiaType.OCT_19: diaDay = DiaType.OCT_20; break;
    case DiaType.OCT_20: diaDay = DiaType.OCT_21; break;
    case DiaType.OCT_21: diaDay = DiaType.OCT_22; break;
    case DiaType.OCT_22: diaDay = DiaType.OCT_23; break;
    case DiaType.OCT_23: diaDay = DiaType.OCT_24; break;
    case DiaType.OCT_24: diaDay = DiaType.OCT_25; break;
    case DiaType.OCT_25: diaDay = DiaType.OCT_26; break;
    case DiaType.OCT_26: diaDay = DiaType.OCT_27; break;
    case DiaType.OCT_27: diaDay = DiaType.OCT_28; break;
    case DiaType.OCT_28: diaDay = DiaType.OCT_29; break;
    case DiaType.OCT_29: diaDay = DiaType.OCT_30; break;
    case DiaType.OCT_30: diaDay = DiaType.OCT_31; break;
    case DiaType.OCT_31: diaDay = DiaType.NOV_01; break;
    case DiaType.NOV_01: diaDay = DiaType.NOV_02; break;
    case DiaType.NOV_02: diaDay = DiaType.NOV_03; break;
    case DiaType.NOV_03: diaDay = DiaType.NOV_04; break;
    case DiaType.NOV_04: diaDay = DiaType.NOV_05; break;
    case DiaType.NOV_05: diaDay = DiaType.NOV_06; break;
    case DiaType.NOV_06: diaDay = DiaType.NOV_07; break;
    case DiaType.NOV_07: diaDay = DiaType.NOV_08; break;
    case DiaType.NOV_08: diaDay = DiaType.NOV_09; break;
    case DiaType.NOV_09: diaDay = DiaType.NOV_10; break;
    case DiaType.NOV_10: diaDay = DiaType.NOV_11; break;
    case DiaType.NOV_11: diaDay = DiaType.NOV_12; break;
    case DiaType.NOV_12: diaDay = DiaType.NOV_13; break;
    case DiaType.NOV_13: diaDay = DiaType.NOV_14; break;
    case DiaType.NOV_14: diaDay = DiaType.NOV_15; break;
    case DiaType.NOV_15: diaDay = DiaType.NOV_16; break;
    case DiaType.NOV_16: diaDay = DiaType.NOV_17; break;
    case DiaType.NOV_17: diaDay = DiaType.NOV_18; break;
    case DiaType.NOV_18: diaDay = DiaType.NOV_19; break;
    case DiaType.NOV_19: diaDay = DiaType.NOV_20; break;
    case DiaType.NOV_20: diaDay = DiaType.NOV_21; break;
    case DiaType.NOV_21: diaDay = DiaType.NOV_22; break;
    case DiaType.NOV_22: diaDay = DiaType.NOV_23; break;
    case DiaType.NOV_23: diaDay = DiaType.NOV_24; break;
    case DiaType.NOV_24: diaDay = DiaType.NOV_25; break;
    case DiaType.NOV_25: diaDay = DiaType.NOV_26; break;
    case DiaType.NOV_26: diaDay = DiaType.NOV_27; break;
    case DiaType.NOV_27: diaDay = DiaType.NOV_28; break;
    case DiaType.NOV_28: diaDay = DiaType.NOV_29; break;
    case DiaType.NOV_29: diaDay = DiaType.NOV_30; 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 trainTypeColor[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);
    }

  13. isTwilightUpなどは使われていなかったので違う部分かと思っていたのですが、そこでいいのですね。であれば、水曜運休の場合分けをご提示の部分でしているようですね。

  14. @sembokulove

    Questioner

    その場合、どのようにすればよろしいのでしょうか。
    そのコードをお願いします。
    日付の省略はOKですが、それ以外はできれば、書いてくだされば幸いです。

  15. その場合とはどの場合ですか? dayJudgeの書き換えということでいいでしょうか? 入力に対する出力のサンプルをご提示いただけますか?

  16. @sembokulove

    Questioner

    在線 20251016 Thu スクリーンショット 2025-10-16 163802.png
    大きいスクリーンショットで申し訳ないのですが、
    上記の通り、本日は10月16日です。
    もし、仮にswitch文のcase10→1にすれば、const diatypeが、15と返されるのです。
    つまり、10月16日と同じ反応をとるわけです。
    従って、こちらをconst diatypeをweekdayもしくは、holidayに振り分けるところから手を付けないといけません。

  17. つまり、現状のdayJudgeの動作は
    dayJudge(2025,10,16) → DiaType.OCT_16
    dayJudge(2025,1,16) → undefined
    であるところを、
    dayJudge(2025,10,16) → DiaType.OCT_16
    dayJudge(2025,1,16) → DiaType.WEEKDAY
    としたい、ということでいいでしょうか?

  18. @sembokulove

    Questioner

    要はそれが、日付を判定し、実際に、10月1日、2日、3日を割り振っているコードというわけですね。
    であれば、
    dayJudge(2025,1,16) → DiaType.WEEKDAYであっています。
    但し、これはdiatype.OCT_16と同様、年ごとに曜日が変動するため、
    固定にしてはいけないことになります。

  19. 実際にコードを書いてみたところ、現状のコードでjudgeDiaDayは2025年1月16日でDiaType.WEEKDAYを返すようです。

    つまり、「それ以外では問答無用で土曜休日が返される」という現象が確認できませんでした。問題の現象を確認する手順を教えていただけませんか?

  20. @sembokulove

    Questioner

    以前、こちらのサイトでほかの質問をした際、あまり長くコードを書かれると読者は疲労困憊するということで、正直避けたかったのですが、
    問題の根本解決のためにはやむなしということで、
    勝手ながら以下の長いコードにお付き合い願えませんか?

     var timeTable = new Array();
    
    //列車データの配列のキーの集合
    var timeTableArrayKey = new Array();
    
    //設定時刻
    var setSecondSum = 0;
    
    //自動リアルタイム更新設定
    var realtimeUpdate = true;
    
    var directionNameAry = ["下り", "上り"];
    
    //日付変更の基準
    var dayChangeTime = 3 * 3600 + 0 * 60;
    
    //始発・終着駅での停留時間
    var turningSecond = 1 * 30;
    
    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();
    }
    
    //基本となる枠組のHTMLを記述する
    function writeBasicHTMLSet()
    {
    	var out = "";
    	out += "";
    	out += "";
    	out += "";
    	
    	out += "<form name='form1'>";
    	
    	out += "";
    	
    	
    	
    	out += "";
    	out += "";
    	out += "";
    	
    	//<img src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/loading.gif' alt='読み込み中' />読み込み中です</span>
    	
    	out += "<div style='position:relative;'>";
    	
    	//マップ  背景色は昔は 9cf
    	out += "  <div id='drawAreaDiv' style='width:1100px; height:450px; background-color:#aec8fc; overflow-y:hidden; overflow-x:scroll; border:solid 1px #000; position:relative; z-index:1 ;' >";
    	out += "    <div id='routeMapDiv' style='position:relative;'></div>";
    	out += "    <div id='trainMappingDiv' style='position:relative;'></div>";
    	out += "  </div>";
    	
    	
    	
    	//左上:現在時刻表示
    	out += "  <div style='position:absolute; top:15px; left:10px; font-size:100%; z-index:3; '>";
    	out += "    <span id='nowDateDisplaySpan' style='position:relative;'></span>";
    	out += "    <span id='setDateDisplaySpan' style='position:relative; color:#f00; '></span> "; 
    	 
    	out += " ";
    	
    	out += "<select size='1' name='updateIntervalSelect' style='font-size:16px;' onChange='changeUpdateInterval();'>";
    	out += "<option value='1'>1秒間隔</option>";
    	out += "<option value='2'>2秒間隔</option>";
    	out += "<option value='3'>3秒間隔</option>";
    	out += "<option value='5' selected>5秒間隔</option>";
    	out += "<option value='10'>10秒間隔</option>";
    	out += "<option value='15'>15秒間隔</option>";
    	out += "<option value='20'>20秒間隔</option>";
    	out += "<option value='25'>25秒間隔</option>";
    	out += "<option value='30'>30秒間隔</option>";
    	out += "<option value='45'>45秒間隔</option>";
    	out += "<option value='60'>60秒間隔</option>";
    	out += "</select>";
    	out += "で更新";
    	
    
    	
    	out += "  </div>";
    	
    	//右上:拡大・縮小ボタン
    	out += "  <div id='expansionButtonDiv' style='position:absolute; top:15px; left:600px; font-size:100%; z-index:3; '>";
    	out += "    <span class='buttonClass' onclick='adjustWidthScale(1.1); adjustRouteMap(); drawTrain();' ><img src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/ecalic039_001.png' alt='' />&nbsp;拡大</span>&nbsp;";
    	out += "    &nbsp;";
    	out += "    <span class='buttonClass' onclick='adjustWidthScale(0.909090909); adjustRouteMap(); drawTrain();' ><img src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/ecalic039_002.png' alt='' />&nbsp;縮小</span>&nbsp;";
    	out += "  </div>";
    	
    	
    	//左下1:
    	out += "  <div id='leftBottomButtonDiv' style='position:absolute; top:510px; left:10px; font-size:100%; z-index:3; '>";
    	out += "   <span id='' class='buttonClass' onclick='updateTimeAdjustDialog()'>時刻調整<span style='font-size:50%;'> ▼</span></span>";
    	out += "  </div>";
    	
    	//時刻微調整ダイアログ
    	out += "  <div id='timeAdjustDialogDiv' style='position:absolute; top:499px; left:-1000px; font-size:100%; z-index:3; background-color:#fff; border: 1px solid #000; padding:10px; '>";
    	out += " <span id='' class='buttonClass' onclick='updateTimeAdjustDialog()'>時刻調整<span style='font-size:50%;'> ▲</span></span><br /><br />";
    	out += "<span id='realTimeModeStatusDiv' class='buttonClass' onclick='timeButtonInterfaceUpdate(true); changeUpdateInterval(); '> リアルタイム表示中 </span><br /><br />";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(-3600)' >1時間前</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(-900)' >15分前</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(-60)' >1分前</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(-5)' >5秒前</span> ";
    	out += "<br /><br />";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(5)' >5秒後</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(60)' >1分後</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(900)' >15分後</span> ";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); addSetTime(3600)' >1時間後</span> <br /><br />";
    	out += "<span class='buttonClass' onclick='timeButtonInterfaceUpdate(false); animetionDialog(); ' id='animeButton' >アニメーション</span> ";
    	out += "<br />";
    	
    	out += "  </div>";
    
    	
    	
    	
    	//左下2:
    	out += "  <div id='leftBottomButtonDiv2' style='position:absolute; top:510px; left:350px; font-size:100%; z-index:3; '>";
    	out += "    <span id='mainRemainTrainCountSpan' class='buttonClass' onclick='updateRemainTrainCountDialog()'></span>";
    	out += "  </div>";
    	
    	//在線本数詳細表示ダイアログ
    	out += "  <div id='detailRemainTrainCountDialogDiv' style='position:absolute; top:499px; left:-500px; font-size:100%; z-index:3; background-color:#fff; border: 1px solid #000; padding:10px; '>";
    	out += "  </div>";
    	
    	
    	
    	//右下:平日土休日ダイヤ切り替えボタン
    	out += "  <div id='rigntBottomButtonDiv' style='position:absolute; top:510px; left:10px; font-size:100%; z-index:3; '>";
    	out += "    <span id='todayDiaDaySpan' style='position:relative;'></span>";
    	out += "    &nbsp;";
    	out += "    <span class='buttonClass' onclick='changeDiaType()' >切り替え</span>";
    	out += "  </div>";
    	
    	
    	
    	
    	
    	
    	out += "</div>";
    	
    	
    	
    	//下の駅時刻表
    	out += "<div id='staTimetableTimeDiv' style='position:relative; height:300px; '>";
    	out += "<div id='staTimetableTimeTitle0Div' style='position:absolute; left:0px; width:450px; text-align:center; ' ></div>";
    	out += "<div id='staTimetableTimeTitle1Div' style='position:absolute; left:500px; width:450px; text-align:center; ' ></div>";
    	out += "<div id='staTimetableTime0Div' style='position:absolute; top:20px; left:0px; width:450px; height:250px; font-size:14px; overflow:scroll; border:solid 1px #000; ' >駅名をクリックすると、時刻表が表示されます。</div>";
    	out += "<div id='staTimetableTime1Div' style='position:absolute; top:20px; left:500px; width:450px; height:250px; font-size:14px; overflow:scroll; border:solid 1px #000; ' ></div>";
    
    	out += "</form>";
    	out += "</div>";
    	
    	document.write(out);
    }
    
    timeAdjustDialogFlag = false;
    //時刻微調整のためのダイアログを表示させる/消す
    function updateTimeAdjustDialog()
    {
    	if(!timeAdjustDialogFlag)
    	{
    		document.getElementById("timeAdjustDialogDiv").style.left = "20px";
    		timeAdjustDialogFlag = true;
    	}
    	else
    	{
    		document.getElementById("timeAdjustDialogDiv").style.left = "-1000px";
    		timeAdjustDialogFlag = false;
    	}
    }
    
    remainTrainCountDialogFlag = false;
    //列車詳細在線本数ダイアログを表示させる/消す
    function updateRemainTrainCountDialog()
    {
    	if(!remainTrainCountDialogFlag)
    	{
    		document.getElementById("detailRemainTrainCountDialogDiv").style.left = "340px";
    		remainTrainCountDialogFlag = true;
    	}
    	else
    	{
    		document.getElementById("detailRemainTrainCountDialogDiv").style.left = "-1000px";
    		remainTrainCountDialogFlag = false;
    	}
    }
    
    //時刻表データを取得、整える
    function getTimeTable() {	
        var i = 0;
        for (i = 0; i < trainBasicData.length; i++) {
            var trainNum = trainBasicData[i][0]; // 列車番号
            var runningDay = trainBasicData[i][1]; // 運転日
            var trainType = trainBasicData[i][2]; // 列車種別
    		
            // 配列のキー
            var arrayKey = trainNum + "_" + runningDay + "_" + trainType;
            // 配列のキーを保存しておく
            timeTableArrayKey[i] = arrayKey;
    		
            timeTable[arrayKey] = new Array();
            timeTable[arrayKey]["列車番号"] = trainBasicData[i][0];
            timeTable[arrayKey]["運転日"] = trainBasicData[i][1];
            timeTable[arrayKey]["種別"] = trainBasicData[i][2];
            timeTable[arrayKey]["列車名"] = trainBasicData[i][3];
            timeTable[arrayKey]["列車名(号数)"] = trainBasicData[i][4];
            timeTable[arrayKey]["方向"] = trainBasicData[i][5];
            timeTable[arrayKey]["始発駅"] = trainBasicData[i][6];
            timeTable[arrayKey]["行先"] = trainBasicData[i][7];
            timeTable[arrayKey]["始発駅発車時刻"] = HHMMtoSecond(trainBasicData[i][8]);
            timeTable[arrayKey]["終着駅発車時刻"] = HHMMtoSecond(trainBasicData[i][9]);
    		
            // 列車ごとに発着時刻の揺らぎを乱数で決める 0〜25の範囲で5秒刻みで
            var timeFluctuation = Math.floor(Math.random() * 5) * 5;
    
            timeTable[arrayKey]["駅時刻"] = new Array();
            var j = 0;
    for (j = 0; j < stationList.length; j++) {
        timeTable[arrayKey]["駅時刻"][j] = new Array();
    
        // 対象外の駅の場合はスキップ
        if (trainTimeData[i][j][0] < 0 && trainTimeData[i][j][1] < 0) {
            continue;
        }
    
        // 着時刻
        var arrivalTime = trainTimeData[i][j][0];
        // 発時刻
        var departureTime = trainTimeData[i][j][1];
    
        // 着時刻と発時刻を秒換算する
        if (arrivalTime >= 0) arrivalTime = HHMMtoSecond(arrivalTime);
        if (departureTime >= 0) departureTime = HHMMtoSecond(departureTime);
    
        // 3時より前の場合は、前日扱いにする
        if (0 <= arrivalTime && arrivalTime < dayChangeTime) arrivalTime += 24 * 60 * 60;
        if (0 <= departureTime && departureTime < dayChangeTime) departureTime += 24 * 60 * 60;
    
        // 着と発が同じ場合
        if (arrivalTime === departureTime) {
            timeTable[arrayKey]["駅時刻"][j]["着"] = arrivalTime;
            timeTable[arrayKey]["駅時刻"][j]["発"] = departureTime + 30/2  - turningSecond;
        }
        // 発と着が違う場合
        else if (arrivalTime >= 0 && departureTime >= 0) {
            timeTable[arrayKey]["駅時刻"][j]["着"] = arrivalTime + 30; // ここでも乱数を加えない
            timeTable[arrayKey]["駅時刻"][j]["発"] = departureTime;
            
            // 時刻が重なっている場合、乱数を加える
            if (timeTable[arrayKey]["駅時刻"][j]["着"] === timeTable[arrayKey]["駅時刻"][j]["発"]) {
                timeTable[arrayKey]["駅時刻"][j]["発"] += Math.floor(Math.random() * 5) * 5; // +方向に乱数を加える
            }
        }
        // 発のみの場合
    			//発のみの場合
    			else if(arrivalTime < 0 && departureTime >= 0)
    			{
    				//発時刻に0〜25秒の揺らぎをたす
    				timeTable[arrayKey]["駅時刻"][j]["発"] = departureTime + 30/2 + timeFluctuation;
    				
    				//始発駅では30秒間停車とする
    				timeTable[arrayKey]["駅時刻"][j]["着"] = departureTime + 30/2 + timeFluctuation - turningSecond;
    			}
    			//着のみの場合
    			else if(arrivalTime >= 0 && departureTime < 0)
    			{
    				//着時刻に+30+0〜25秒の揺らぎをたす
    				timeTable[arrayKey]["駅時刻"][j]["着"] = arrivalTime + 30/2 + timeFluctuation;
    				
    				//終着駅では30秒間停車とする
    				timeTable[arrayKey]["駅時刻"][j]["発"] = arrivalTime + 30/2 + timeFluctuation + turningSecond;
    			}
    
        // 発時刻が未設定の場合、着時刻に30秒と揺らぎを加えた値を設定
        if (timeTable[arrayKey]["駅時刻"][j]["発"] === undefined && timeTable[arrayKey]["駅時刻"][j]["着"] !== undefined) {
            timeTable[arrayKey]["駅時刻"][j]["発"] = timeTable[arrayKey]["駅時刻"][j]["着"] - 30; // マイナス方向
        }
    
        // のりば
        timeTable[arrayKey]["駅時刻"][j]["のりば"] = trainTimeData[i][j][2];
    }
    
    	
            // 通過駅の各駅の通過時刻を推定する
            if (timeTable[arrayKey]["方向"] == "下り") {
                j = 0;
            } else {
                j = stationList.length - 1;
            }
    		
            var passingStartStationNum = 0;
            var passingEndStationNum = 0;
            var passingFlag = false;
            while (true) {
                var nowStationNum = j;
                var nextStationNum = (timeTable[arrayKey]["方向"] == "下り") ? j + 1 : j - 1;
    
                // 停車駅→通過駅の場合
                if (trainTimeData[i][nowStationNum][1] != -2 && trainTimeData[i][nextStationNum][0] == -2) {
                    passingStartStationNum = nowStationNum;
                    passingFlag = true;
                }
                // 通過駅→停車駅の場合
                else if (passingFlag && trainTimeData[i][nowStationNum][1] == -2 && trainTimeData[i][nextStationNum][0] != -2) {
                    passingEndStationNum = nextStationNum;
                    var passingDistance = getDistance(passingStartStationNum, passingEndStationNum);
                    var passingTimeSum = timeTable[arrayKey]["駅時刻"][passingEndStationNum]["着"] - timeTable[arrayKey]["駅時刻"][passingStartStationNum]["発"];
                    var k = (timeTable[arrayKey]["方向"] == "下り") ? passingStartStationNum + 1 : passingStartStationNum - 1;
    
                    while (true) {
                        var d = getDistance(passingStartStationNum, k);
                        var ratio = d / passingDistance;
                        var passingTime = timeTable[arrayKey]["駅時刻"][passingStartStationNum]["発"] + Math.floor(passingTimeSum * ratio);
    					
                        timeTable[arrayKey]["駅時刻"][k]["着"] = passingTime;
                        timeTable[arrayKey]["駅時刻"][k]["発"] = passingTime;
    					
                        if (timeTable[arrayKey]["方向"] == "下り") k++;
                        else k--;
    					
                        if ((timeTable[arrayKey]["方向"] == "下り" && k > passingEndStationNum - 1) || 
                            (timeTable[arrayKey]["方向"] == "上り" && k < passingEndStationNum + 1)) {
                            break;
                        }
                    }
                }
    
                if (timeTable[arrayKey]["方向"] == "下り") j++;
                else j--;
    			
                if ((timeTable[arrayKey]["方向"] == "下り" && j > stationList.length - 1 - 1) ||
                    (timeTable[arrayKey]["方向"] == "上り" && j < 0 + 1)) {
                    break;
                }
            }
        }
    
        // 3時になるまでは前日として扱うように
        // midnightSpecialTime();
    }
    
    
    /*
    //3時になるまでは前日として扱うように
    function midnightSpecialTime()
    {
    	var i=0;
    	var j=0;
    	for(i=0 ; i<timeTableArrayKey.length ; i++)
    	{		
    		arrayKey = timeTableArrayKey[i];
    		
    		for(j=0 ; j<stationList.length ; j++)
    		{
    			
    			
    			//データの確認
    			if(arrayKey == "529C_平日")
    				alert(stationList[j]+"駅 "+timeTable[arrayKey]["駅時刻"][stationList[j]]["着"]+" / "+timeTable[arrayKey]["駅時刻"][stationList[j]]["発"]);
    		}
    	}
    }
    */
    	
    
    
    
    //現在時刻を取得・表示する
    function nowTimeDisplay()
    {
    	nowDateSet = new Date();
    	nowYear = nowDateSet.getYear(); //年
    	nowMonth = nowDateSet.getMonth() + 1; //月
    	nowDate = nowDateSet.getDate(); //日
    	nowDay = nowDateSet.getDay(); //曜日
    	nowHour = nowDateSet.getHours(); //時
    	nowMinute = nowDateSet.getMinutes(); //分
    	nowSecond = nowDateSet.getSeconds(); //秒
    	nowMilliSecond = nowDateSet.getMilliseconds(); //ミリ秒
    	
    	if(nowYear < 2000)  nowYear += 1900; //年の補正、1900プラスしとかないといけない場合があるため
    	
    	//秒換算を計算
    	//setSecondSum = HHMMSSToSecond(nowHour, nowMinute, nowSecond);
    	
    	//3:00:00なら、ダイヤ切り替えのためページ再読み込み
    	if(nowSecond == 0)
    	{
    		if(HHMMSSToSecond(nowHour, nowMinute, nowSecond) == dayChangeTime)
    			location.reload();
    	}
    	
    	
    	//現在時刻を表示
    	if(!realtimeUpdate)
    		var spanTag = "<span id='nowDateTimeSpan' style='text-decoration:line-through;'>";
    	else
    		var spanTag = "<span id='nowDateTimeSpan'>";
    	
    	//現在時刻表示欄が存在すれば、表示させる
    	if(document.getElementById("nowDateDisplaySpan") != null)
    		document.getElementById("nowDateDisplaySpan").innerHTML = " " + nowYear+"/"+nowMonth+"/"+nowDate+"("+numToYobi[nowDay]+") "+spanTag+digitAdjuster(nowHour, " ")+":"+digitAdjuster(nowMinute, "0")+":"+digitAdjuster(nowSecond, "0"+"</span>");
    	
    }
    
    //現在時刻に設定する(リアルタイム設定)
    function setNowTime()
    {
    	//秒換算して、設定時刻を変更し、表示を反映させる
    	setNewTime(HHMMSSToSecond(nowHour, nowMinute, nowSecond));
    	
    	//路線図に列車を配置していく
    	drawTrain();
    }
    
    
    
    //リアルタイムモードかどうかで表示インタフェースを変更する
    function timeButtonInterfaceUpdate(hikisu)
    {
    	//引数がtrueなら、リアルタイムモードのインタフェースに
    	if(hikisu)
    	{
    		realtimeUpdate = true;
    		document.getElementById("realTimeModeStatusDiv").innerHTML = " リアルタイム表示中 ";
    		//ドロップダウンリストの有効化
    		document.form1.updateIntervalSelect.disabled = false;
    	}
    	else
    	{
    		realtimeUpdate = false;
    		document.getElementById("realTimeModeStatusDiv").innerHTML = "リアルタイム表示にする";
    		//ドロップダウンリストの無効化
    		document.form1.updateIntervalSelect.disabled = true;
    		
    		//もしタイマーが事前にかかっていたら、止める
    		clearInterval(updateIntervalTimer);
    	}
    }
    
    var animeInterval;
    var animeStatus = false;
    //アニメーション表示する
    function animetionDialog()
    {
    	clearInterval(animeInterval);
    	
    	//アニメ中じゃなかったら
    	if(!animeStatus)
    	{
    		animeStatus = true;
    		document.getElementById("animeButton").innerHTML = "アニメーションをやめる";
    		animeInterval = setInterval('addSetTime(10)', 16);
    	}
    	//アニメ中だったら
    	else
    	{
    		animeStatus = false;
    		document.getElementById("animeButton").innerHTML = "アニメーション";
    	}
    	
    
    	/*
    	if(window.confirm("注意:\nアニメーション表示は高負荷な処理で、お使いの機器(CPU)にそれなりの高い処理能力が必要とされます。\n性能のあまり高くないパソコンや古いパソコン、スマートフォン、携帯電話等の場合、処理に耐えられずにフリーズ、アプリの強制終了、それにより機器にダメージを与える場合があります。\n性能の高いパソコン等であっても、場合によっては処理が遅くなることもあります。\n\nアニメーション表示をしますか?"))
    	{
    		alert("アニメーション表示をやめたい場合は、ページを再読み込みしてください。")
    		setInterval('addSetTime(10)', 16);
    	}
    	 */
    }
    
    //設定時刻に何秒か足して、再描画する
    function addSetTime(value)
    {
    	var secondSum = setSecondSum + value;
    	if(secondSum >= 24*60*60)
    		secondSum -= 24*60*60;
    	else if(secondSum < 0 )
    		secondSum += 24*60*60;
    	
    	setNewTime(secondSum);
    	
    	//路線図に列車を配置していく
    	drawTrain();
    }
    
    //設定時刻を変更し、表示を反映させる
    function setNewTime(value)
    {
    	setSecondSum = value;
    	
    	//3時までなら、前日扱いにする
    	if(setSecondSum < dayChangeTime)
    		setSecondSum += 24 * 60 * 60;
    	
    	//設定時刻を表示
    	if(!realtimeUpdate)
    	{
    		if(document.getElementById("setDateDisplaySpan") != null)
    			document.getElementById("setDateDisplaySpan").innerHTML = "" +digitAdjuster(secondToHour(setSecondSum), " ")+":"+digitAdjuster(secondToMinute(setSecondSum), "0")+":"+digitAdjuster(secondToSecond(setSecondSum), "0")+"を表示中";
    		if(document.getElementById("nowDateTimeSpan") != null)
    			document.getElementById("nowDateTimeSpan").style.textDecoration = "line-through";
    	}
    	else
    	{
    		if(document.getElementById("setDateDisplaySpan") != null)
    			document.getElementById("setDateDisplaySpan").innerHTML = "";
    		if(document.getElementById("nowDateTimeSpan") != null)
    			document.getElementById("nowDateTimeSpan").style.textDecoration = "none";
    	}
    	
    	//各列車の在線位置を割り出す
    	getTrainPosition();
    
    }
    
    //数字を与えると曜日(漢字)に変換
    numToYobi = new Array("日","月","火","水","木","金","土");
    
    //桁数が1ならば、十の位にスペースや0をを付ける、
    //「9」→「09」 や 「9」→「 9」など
    //引数num が10以下なら その数の先頭にaddString をつける
    function digitAdjuster(num, addString)
    {
    	//1桁なら手前に文字を付けて戻り値で返す
    	if(num < 10)
    		return addString + num;
    	else
    		return num;
    }
    
    
    
    //駅での停車時間プラスマイナス何秒は停車と見なされるのか
    var stationStopSpareTime = 0;
    
    
    
    //各列車の在線位置を割り出す
    function getTrainPosition()
    {
    	//配列の中身をリセット
    	trainExistData = new Array();
    	trainExistCount = 0;
    		
    	var i=0;
    	for(i=0 ; i<trainBasicData.length ; i++)
    	{		
    		arrayKey = timeTableArrayKey[i];
    
    		//運転日が一致する場合のみ続ける
    		//if(timeTable[arrayKey]["運転日"] != "平日" && timeTable[arrayKey]["運転日"] != "全日")
    		if(!judgeTrainRunningDay(timeTable[arrayKey]["運転日"]))
    			continue;
    		
    		/*
    		//始発駅発車時刻と終着駅到着時刻の間以外の場合は処理をスキップするようにする
    		if(timeTable[arrayKey]["始発駅発車時刻"] > setSecondSum || setSecondSum > timeTable[arrayKey]["終着駅発車時刻"])
    		{
    			//alert("とばす 現在時刻"+setSecondSum+" "+timeTable[arrayKey]["始発駅発車時刻"]+"〜"+timeTable[arrayKey]["終着駅発車時刻"])
    			continue;
    		}
    		 */
    		
    		
    		//下りの場合は米原から姫路へ
    		//上りの場合は姫路から米原へ
    		//初期値
    		if(timeTable[arrayKey]["方向"] == "下り")
    			j = 0;
    		else
    			j = stationList.length - 1;
    		
    		while(true)
    		{
    			//if(arrayKey == "2119G_全日")
    				//alert(arrayKey+"列車 "+timeTable[arrayKey]["方向"]+" "+stationList[j]+"駅 "+trainTimeData[i][j][0]+" "+trainTimeData[i][j][1]+" "+trainTimeData[i][j][2]);
    			
    			//対象外の駅の場合は以下の処理はスキップするようにする
    			if(trainTimeData[i][j][0] != -1 || trainTimeData[i][j][1] != -1)
    			{
    				//今見ている駅
    				var nowStationNum = j;
    				
    				//次に進む駅
    				if(timeTable[arrayKey]["方向"] == "下り")
    					nextStationNum = j + 1;
    				else
    					nextStationNum = j - 1;
    				
    				//if(arrayKey == "2119G_全日")
    					//alert("now: "+setSecondSum+"  "+arrayKey+"列車 "+stationList[nowStationNum]+"  "+timeTable[arrayKey]["駅時刻"][stationList[nowStationNum]]["着"]+"/"+timeTable[arrayKey]["駅時刻"][stationList[nowStationNum]]["発"])
    				
    				//駅に停車中の列車が見つかったら
    				if(timeTable[arrayKey]["駅時刻"][nowStationNum]["着"] - stationStopSpareTime <= setSecondSum && timeTable[arrayKey]["駅時刻"][nowStationNum]["発"] + stationStopSpareTime > setSecondSum)
    				{
    					//列車の在線状況を記録
    					recordTrainExistData(arrayKey, nowStationNum, -1);
    					
    					//if(arrayKey == "2127G_全日")
    						//alert(timeTable[arrayKey]["列車番号"] +" "+stationList[j]+"駅 "+secondToHHMMSS(timeTable[arrayKey]["駅時刻"][stationList[j]]["着"])+"~"+secondToHHMMSS(timeTable[arrayKey]["駅時刻"][stationList[j]]["発"])+" 停車中");
    				}
    				
    				//駅間走行中の判定は次の駅の分まで見るので、配列外を参照してしまわないようにここで止める
    				if(nextStationNum < 0 || nextStationNum > stationList.length - 1 )
    					break;
    								
    				//駅間走行中の列車が見つかったら
    				//alert(stationList[j]);
    				
    				//if(arrayKey == "2127G_全日")
    					//alert(stationList[nowStationNum]+" "+timeTable[arrayKey]["駅時刻"][stationList[nowStationNum]]["発"] +"+"+ stationStopSpareTime +"<="+ setSecondSum +"&&"+ timeTable[arrayKey]["駅時刻"][stationList[nextStationNum]]["着"] +"-"+ stationStopSpareTime +">"+ setSecondSum)
    
    				if(timeTable[arrayKey]["駅時刻"][nowStationNum]["発"] + stationStopSpareTime <= setSecondSum && timeTable[arrayKey]["駅時刻"][nextStationNum]["着"] - stationStopSpareTime > setSecondSum)
    				{
    					//駅発車〜次駅までにかかる時間
    					var t1 = timeTable[arrayKey]["駅時刻"][nextStationNum]["着"] - timeTable[arrayKey]["駅時刻"][nowStationNum]["発"];
    					//駅発車〜今現在までの時間
    					var t2 = setSecondSum - timeTable[arrayKey]["駅時刻"][nowStationNum]["発"];
    					var advance = t2 / t1;
    					
    					//列車の在線状況を記録
    					if(timeTable[arrayKey]["方向"] == "下り")
    						recordTrainExistData(arrayKey, nowStationNum, advance);
    					else
    						recordTrainExistData(arrayKey, nextStationNum, advance);
    					
    					//if(arrayKey == "2127G_全日")
    						//alert(timeTable[arrayKey]["列車番号"] +" "+stationList[j]+"駅 "+secondToHHMMSS(timeTable[arrayKey]["駅時刻"][stationList[j]]["発"])+"~"+stationList[j+1]+"駅 "+secondToHHMMSS(timeTable[arrayKey]["駅時刻"][stationList[j+1]]["着"])+" 走行中 "+ advance+"");
    				}
    				
    			}
    			
    
    			//ループを繰り返すたびに実行する処理
    			if(timeTable[arrayKey]["方向"] == "下り")
    				j++;
    			else
    				j--;
    			
    			//ループを抜ける条件
    			if(timeTable[arrayKey]["方向"] == "下り" && j > stationList.length - 1 )
    				break;
    			else if(timeTable[arrayKey]["方向"] == "上り" && j < 0 )
    				break;
    			
    		}
    			
    		
    	}
    	
    }
    
    //列車の在線状況を記録
    function recordTrainExistData(arrayKey1, position, advance)
    {
    	trainExistData[trainExistCount] = new Array();
    	trainExistData[trainExistCount] = [arrayKey1, position, advance];
    	
    	trainExistCount++;
    }
    
    
    var mapStationWidth = 50;
    var mapStationBetweenWidth = 50;
    var lineHeight = 70;
    
    
    
    //路線図を描く
    function drawRouteMap()
    {
    	var text = "";
    	
    	//各駅の白い枠
    	for(i=stationList.length-1 ; i>=0 ; i--)
    	{
    		//駅名
    		text += "<div id='stationFlameDiv"+i+"' style='position:absolute; background-color:#fff; text-align:center; vertical-align:middle; opacity:0.4; filter: alpha(opacity=40); -ms-filter: alpha(opacity=20); zoom:1; '></div>\n";
    	}
    	
    	//線路
    	if(kudariRapidLineData[0])
    		text += "<img id='kudariRapidLineImg' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/line.png' alt='' style='position:absolute; ' />\n";
    	if(kudariSlowLineData[0])
    		text += "<img id='kudariSlowLineImg' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/line.png' alt='' style='position:absolute; ' />\n";
    	if(noboriSlowLineData[0])
    		text += "<img id='noboriSlowLineImg' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/line.png' alt='' style='position:absolute; ' />\n";
    	if(noboriRapidLineData[0])
    		text += "<img id='noboriRapidLineImg' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/line.png' alt='' style='position:absolute; ' />\n";
    	
    	for(i=stationList.length-1 ; i>=0 ; i--)
    	{
    		//駅名
    		var stationName = stationList[i].substring(0,4);
    		text += "<div id='stationTopDiv"+i+"' class='staNameButtonClass' style='position:absolute; text-align:center; vertical-align:middle; border-bottom: 2px solid #000; border-right: 2px solid #000;' onclick='getStationTimetable("+i+")'>"+stationName+"</div>\n";
    		text += "<div id='stationBottomDiv"+i+"' class='staNameButtonClass' style='position:absolute; text-align:center; vertical-align:middle; border-bottom: 2px solid #000; border-right: 2px solid #000;' onclick='getStationTimetable("+i+")'>"+stationName+"</div>\n";
    	}
    	
    	
    	text += "";
    	text += "";
    	text += "";
    	text += "";
    	text += "";
    	text += "";
    	text += "";
    	
    	
    	document.getElementById("routeMapDiv").innerHTML = text;
    }
    
    
    
    function adjustWidthScale(num)
    {
    	WidthPerKM *= num;
    }
    
    
    function adjustRouteMap()
    {
    	//フォームから値読み込み
    	//var index = document.form1.mapStationWidthSelect.selectedIndex; //選択しているインデックス番号を取得
    	//var name1 = document.form1.mapStationWidthSelect.options[index].value; //そのインデックス番号のvalueの値を取得
    	
    	var name1 = 50; 
    	
    	/*
    	if(ScareFlag == false)
    	{
    		var index = document.form1.mapStationBetweetWidthSelect.selectedIndex; //選択しているインデックス番号を取得
    		WidthPerKM = document.form1.mapStationBetweetWidthSelect.options[index].value; //そのインデックス番号のvalueの値を取得
    	}
    	 */
    	
    	//基本サイズ
    	basicSize = name1;
    	//基本の横幅サイズ
    	basicWidthSize = basicSize * WidthPerKM;
    	
    	mapStationWidth = WidthPerKM;
    	mapStationBetweenWidth = WidthPerKM;
    	
    	//線の間隔
    	lineHeight = name1 * 1.8;
    	
    	//余白
    	offset_x = 50;
    	offset_y = 45;
    	
    	//表示エリアの縦幅を変更
    	document.getElementById("drawAreaDiv").style.height = offset_y + lineHeight * 5 + offset_y + 60 + "px";
    	
    	//駅間の平均距離を求める
    	var aveDistance = getDistance(0, stationList.length-1) / stationList.length-1
    	
    	//駅間の最短距離を求める
    	var minDistance = 1000000;
    	for(i=0 ; i<stationList.length-1 ; i++)
    	{
    		var d = getDistance(i, i+1);
    		if(d < minDistance)
    			minDistance = d;
    	}
    	
    	//alert("最小は"+d);
    	
    
    	
    	
    	//////各駅のdiv
    	//駅の薄い白い部分の横幅
    	var stationWhiteAreaWidth = Math.ceil(WidthPerKM * 0.3);
    	for(i=0 ; i<stationList.length ; i++)
    	{
    		//その駅の起点からの距離 単位:1km
    		var stationDistance = getDistance(0, i);
    		
    		//駅名divの横幅
    		//var stationNameDivWidth = WidthPerKM * (minDistance + (aveDistance - minDistance) * 0.5 ) * 2;
    		var stationNameDivWidth = WidthPerKM * minDistance;
    		
    		if(stationNameDivWidth < 30)
    			stationNameDivWidth = 30;
    		if(stationNameDivWidth > 70)
    			stationNameDivWidth = 70;
    		
    		//横幅に合わせて駅名表示の文字数を変える
    		if(stationNameDivWidth < 13*3)
    			var stationChar = 2;
    		else if(stationNameDivWidth < 13*4)
    			var stationChar = 3;
    		else if(stationNameDivWidth < 13*5)
    			var stationChar = 4;
    		else if(stationNameDivWidth < 13*6)
    			var stationChar = 5;
    		else
    			var stationChar = 6;
    		
    		var stationName = stationList[i].substring(0,stationChar);
    		
    		
    		//偶数目と奇数目の駅名で上下にずらさせる
    		stationDivPadding = 25;
    		if(i%2 != 0)
    		{
    			//奇数の場合
    			if(i == stationList.length - 1)
    			{
    				//右端の駅の場合
    				if(getDistance(i-1, i) * WidthPerKM < stationNameDivWidth + 2)
    					var setStationDivPadding = stationDivPadding;
    				else
    					var setStationDivPadding = 0;
    			}
    			else
    			{
    				if(getDistance(i-1, i) * WidthPerKM < stationNameDivWidth + 2 || getDistance(i, i+1) * WidthPerKM < stationNameDivWidth + 2)
    					var setStationDivPadding = stationDivPadding;
    				else
    					var setStationDivPadding = 0;
    			}
    		}
    		else
    			var setStationDivPadding = 0;
    		
    		//上の駅名表示
    		var id = "stationTopDiv" + i;
    		document.getElementById(id).style.top = offset_y + setStationDivPadding + "px";
    		document.getElementById(id).style.left = offset_x + stationDistance * WidthPerKM - stationNameDivWidth / 2 + "px";
    		document.getElementById(id).style.width = stationNameDivWidth + "px";
    		document.getElementById(id).style.height = basicSize / 3 + "px";
    		document.getElementById(id).style.fontSize = basicSize / 4.5 + "px";
    		document.getElementById(id).innerHTML = stationName;
    		
    		//下の駅名表示
    		var id = "stationBottomDiv" + i;
    		document.getElementById(id).style.top = (offset_y + stationDivPadding * 2 - setStationDivPadding + stationDivPadding + lineHeight * 4) + "px";
    		document.getElementById(id).style.left = offset_x + stationDistance * WidthPerKM - stationNameDivWidth / 2 + "px";
    		document.getElementById(id).style.width = stationNameDivWidth + "px";
    		document.getElementById(id).style.height = basicSize / 3 + "px";
    		document.getElementById(id).style.fontSize = basicSize / 4.5 + "px";
    		document.getElementById(id).innerHTML = stationName;
    		
    		//駅の白いエリア表示
    		var id = "stationFlameDiv" + i;
    		document.getElementById(id).style.top = offset_y + setStationDivPadding + "px";
    		document.getElementById(id).style.left = offset_x + stationDistance * WidthPerKM - stationWhiteAreaWidth / 2 + "px";
    		document.getElementById(id).style.width = stationWhiteAreaWidth + "px"; //小数点以下は切り上げ
    		document.getElementById(id).style.height = lineHeight * 4.5 + stationDivPadding * 2 - setStationDivPadding * 2 + "px";
    	}
    
    	
    	//線路を描画
    	if(kudariRapidLineData[0])
    	{
    		var id = "kudariRapidLineImg";
    		document.getElementById(id).style.top = (offset_y + stationDivPadding + lineHeight * 0.8 + 15) + "px";
    		document.getElementById(id).style.left = offset_x + getDistance(0, kudariRapidLineData[1]) * WidthPerKM - stationWhiteAreaWidth * 0.5 + "px";
    		document.getElementById(id).style.width = (getDistance(kudariRapidLineData[1], kudariRapidLineData[2]) * WidthPerKM) + stationWhiteAreaWidth + "px";
    		document.getElementById(id).style.height = 4 + "px";
    	}
    	
    	if(kudariSlowLineData[0])
    	{
    		var id = "kudariSlowLineImg";
    		document.getElementById(id).style.top = (offset_y + stationDivPadding + lineHeight * 2 + 15) + "px";
    		document.getElementById(id).style.left = offset_x + getDistance(0, kudariSlowLineData[1]) * WidthPerKM - stationWhiteAreaWidth * 0.5 + "px";
    		document.getElementById(id).style.width = getDistance(kudariSlowLineData[1], kudariSlowLineData[2]) * WidthPerKM + stationWhiteAreaWidth + "px";
    		document.getElementById(id).style.height = 4 + "px";
    	}
    	
    	if(noboriSlowLineData[0])
    	{
    		var id = "noboriSlowLineImg";
    		document.getElementById(id).style.top = (offset_y + stationDivPadding + lineHeight * 3.2 + 15) + "px";
    		document.getElementById(id).style.left = offset_x + getDistance(0, noboriSlowLineData[1]) * WidthPerKM - stationWhiteAreaWidth * 0.5 + "px";
    		document.getElementById(id).style.width = getDistance(noboriSlowLineData[1], noboriSlowLineData[2]) * WidthPerKM + stationWhiteAreaWidth + "px";
    		document.getElementById(id).style.height = 4 + "px";
    	}
    	
    	if(noboriRapidLineData[0])
    	{
    		var id = "noboriRapidLineImg";
    		document.getElementById(id).style.top = (offset_y + stationDivPadding + lineHeight * 4.4 + 15) + "px";
    		document.getElementById(id).style.left = offset_x + getDistance(0, noboriRapidLineData[1]) * WidthPerKM - stationWhiteAreaWidth * 0.5 + "px";
    		document.getElementById(id).style.width = (getDistance(noboriRapidLineData[1], noboriRapidLineData[2]) * WidthPerKM) + stationWhiteAreaWidth + "px";
    		document.getElementById(id).style.height = 4 + "px";
    	}
    	
    	
    }
    
    
    //最初に列車を描くスペースを作っておく
    //最初に列車を描くスペースを作っておく
    function makeDrawTrainSpace()
    {
    	var outputHTML = "";
    	var i;
    	for(i = 0 ; i < 200 ; i++)
    	{
    		var imgId = "trainImg"+i;
    		var divId = "trainInfoDiv"+i;
    		var trainNumSpanId = "trainInfoTrainNumSpan"+i;
    		var trainTypeSpanId = "trainInfoTrainTypeSpan"+i;
    		var trainNameSpanId = "trainInfoTrainNameSpan"+i;
    		var trainNameNumSpanId = "trainInfoTrainNameNumSpan"+i;
    		var destinatioSpanId = "trainInfoDestinationSpan"+i;
    		outputHTML += "<img id='"+imgId+"' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/223.png' alt='' style='position:absolute;' />\n";
    		outputHTML += "<div id='"+divId+"' style='position:absolute; line-height:1.2;'><span id='"+trainNumSpanId+"' class='trainNumColor'></span><br /><span id='"+trainTypeSpanId+"'></span><br /><span id='"+trainNameSpanId+"'></span><br /><span id='"+trainNameNumSpanId+"' class='trainNameNumFont'></span><br /><span id='"+destinatioSpanId+"'></span></div>\n";
    	}
    	
    	//書き足す
    	document.getElementById("trainMappingDiv").innerHTML = outputHTML;
    }
    
    
    //路線図に列車を配置していく
    function drawTrain()
    {
    	//alert(typeof(hasshahyoMode));
    	//発車標のページから呼び出されているなら、処理しない
    	if(!(typeof(hasshahyoMode) == "undefined"))
    	{
    		//alert("スキップします");
    		return;
    	}
    	
    	//一旦中身を初期化
    	//document.getElementById("trainMappingDiv").innerHTML = "";
    	
    	//本数をカウントする変数も初期化
    	var existCount = new Array();
    	var i;
    	for(i=0 ; i<trainTypeColor.length ; i++)
    	{
    		existCount[trainTypeColor[i][0]] = 0;
    	}
    	
    	//existCount["普通"] = 0;
    	//existCount["快速"] = 0;
    	//existCount["新快速"] = 0;
    	//existCount["特急"] = 0;
    	//existCount["L特急"] = 0;
    	
    	
    	for(i = 0 ; i<trainExistData.length ; i++)
    	{
    		var arrayKey = trainExistData[i][0];
    		var imgId = "trainImg"+i;
    		var divId = "trainInfoDiv"+i;
    		var trainNumSpanId = "trainInfoTrainNumSpan"+i;
    		var trainTypeSpanId = "trainInfoTrainTypeSpan"+i;
    		var trainNameSpanId = "trainInfoTrainNameSpan"+i;
    		var trainNameNumSpanId = "trainInfoTrainNameNumSpan"+i;
    		var destinatioSpanId = "trainInfoDestinationSpan"+i;
    		//outputHTML += "<img id='"+imgId+"' src='./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/223.png' alt='' style='position:absolute; ' />\n";
    		
    		
    		var color1 = getTypeColor(timeTable[arrayKey]["種別"], 0);
    		var color2 = getTypeColor(timeTable[arrayKey]["種別"], 1);
    		
    		/////その列車の在線位置(距離)を特定
    		//駅に停車中の場合
    		if(trainExistData[i][2] == "-1")
    		{
    			var trainDistance = getDistance(0, trainExistData[i][1]);
    		}
    		//走行中の場合
    		else
    		{
    			//どれぐらいの割合を通過しきれてるか
    			if(timeTable[arrayKey]["方向"] == "下り")
    			{
    				var advance = trainExistData[i][2];
    				var advanceDinstance = getDistance(trainExistData[i][1], trainExistData[i][1] + 1) * advance;
    			}
    			else if(timeTable[arrayKey]["方向"] == "上り")
    			{
    				var advance = 1 - trainExistData[i][2];
    				var advanceDinstance = getDistance(trainExistData[i][1], trainExistData[i][1] + 1) * advance;
    			}
    			
    			
    			var trainDistance = getDistance(0, trainExistData[i][1]) + advanceDinstance;
    
    		}
    		
    		/*
    		if(arrayKey == "2013G_全日")
    		{
    			alert("2013G在戦中");
    			//alert(trainDistance);	
    		}
    		 */
    		
    		
    		
    		//color1 が背景色
    		//color2 が文字色
    		//列車番号の部分の背景色を設定
    		//列車番号の欄の色を設定
    		document.getElementById(trainNumSpanId).style.backgroundColor = color1;
    		document.getElementById(trainNumSpanId).style.color = color2;
    		
    		
    		//列車番号を頭上に付記
    		document.getElementById(trainNumSpanId).innerHTML = timeTable[arrayKey]["列車番号"];
    		document.getElementById(trainTypeSpanId).innerHTML = timeTable[arrayKey]["種別"];
    		//行き先を付記
    		document.getElementById(trainNameSpanId).innerHTML = timeTable[arrayKey]["列車名"];
    		//行き先を付記
    		document.getElementById(trainNameNumSpanId).innerHTML = timeTable[arrayKey]["列車名(号数)"];
    		//行き先を付記
    		document.getElementById(destinatioSpanId).innerHTML = timeTable[arrayKey]["行先"];
    		
    		//outputHTML += "<div id='"+divId+"' style='position:absolute; ' ><span style='background-color:" + color1 + "; color:" + color2 + "'>"+timeTable[arrayKey]["列車番号"]+"</span><br />"+timeTable[arrayKey]["種別"]+"<br />"+timeTable[arrayKey]["列車名"]+"<br />""+timeTable[arrayKey]["列車名(号数)"]+"<br />"+timeTable[arrayKey]["行先"]+"</div>\n";
    		
    		document.getElementById(imgId).style.width = 30 + "px";
    		document.getElementById(divId).style.width = 100 + "px";
    		
    		document.getElementById(imgId).style.left = offset_x + trainDistance * WidthPerKM - 30 / 2 + "px";
    		document.getElementById(divId).style.left = offset_x + trainDistance * WidthPerKM - 100 / 2 + "px";
    		
    		document.getElementById(imgId).style.height = 20 + "px";
    		document.getElementById(divId).style.height = 20 + "px";
    		
    		document.getElementById(divId).style.fontSize = basicSize / 4.5 + "px";
    		document.getElementById(divId).style.textAlign = "center";
    		
    		//alert(document.getElementById(imgId).onclick)
    		
    		
    		//上から何番目の線路を走っているか
    		var runningTrack = judgeLineTrack(timeTable[arrayKey]["方向"], timeTable[arrayKey]["種別"], trainDistance);
    
    		document.getElementById(divId).style.top = (offset_y + stationDivPadding + basicSize / 3 + basicSize / 10 + lineHeight * (runningTrack - 1)) + "px";
    		document.getElementById(imgId).style.top = (offset_y + stationDivPadding + basicSize / 3 + basicSize / 10 + lineHeight * (runningTrack - 0.55) + basicSize / 1.6) + "px";	
    		
    		
    		//種別によって表示される画像を変更する
    		//種別によって表示される画像を変更する
    		//種別によって表示される画像を変更する
    		//種別によって表示される画像を変更する
    		//種別によって表示される画像を変更する
    		if(timeTable[arrayKey]["列車名"] == "しらさぎ")
    		{
    		if((timeTable[arrayKey]["列車番号"] == "1M")||(timeTable[arrayKey]["列車番号"] == "2M")||(timeTable[arrayKey]["列車番号"] == "5M")||(timeTable[arrayKey]["列車番号"] == "10M")||(timeTable[arrayKey]["列車番号"] == "13M")||(timeTable[arrayKey]["列車番号"] == "14M")){
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/Mc485-200 国鉄色(しらさぎ) w485k.png";
    		}
    		else if((timeTable[arrayKey]["列車番号"] == "42~9002M")||(timeTable[arrayKey]["列車番号"] == "9005M~39M")||(timeTable[arrayKey]["列車番号"] == "8004~9004M")||(timeTable[arrayKey]["列車番号"] == "9007M~8007M"))
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/Tc481-100 国鉄色(しらさぎ) w485bo_srg.png";
    		}
    		else
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/Tc481-300 国鉄色(しらさぎ) w485_srg.png";
    		}}
    		else if(timeTable[arrayKey]["列車名"] == "加越")
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/Tc481-100 国鉄色(加越) w485kn-b_kae.png";
    		}
    		else if(timeTable[arrayKey]["種別"] == "普通" || timeTable[arrayKey]["種別"] == "快速")
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/Mc475-0 普通 w455b.png";
    		}
    		else if(timeTable[arrayKey]["列車名"] == "普通2")
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/683.png";
    		}
    		else if(timeTable[arrayKey]["列車名"] == "特急")
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/683.png";
    		}
    		else
    		{
    			document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/223.png";
    		}
    		
    		//種別ごとに本数をカウント
    		existCount[timeTable[arrayKey]["種別"]]++;
    		
    		
    		
    		///////クリックされた際の処理
    		//var text = "<span onclick=getTrainTimetableInfo('"+arrayKey+"')>" + document.getElementById(imgId).innerHTML + "</span>"
    		//document.getElementById(imgId).innerHTML = text;
    		
    		//var text = "<span onclick=getTrainTimetableInfo('"+arrayKey+"')>" + document.getElementById(divId).innerHTML + "</span>"
    		//document.getElementById(divId).innerHTML = text;
    		
    		//alert(arrayKey+"をうえつけ");
    		
    		//document.getElementById(imgId).onclick = function(){ getTrainTimetableInfo(arrayKey); };
    		//document.getElementById(divId).onclick = function(){ getTrainTimetableInfo(arrayKey); };
    	}
    	
    	
    	
    	
    	
    	
    	//alert(i);
    	//残りはいらないので、無表示にしておく
    	while(i < 200)
    	{
    		var imgId = "trainImg"+i;
    		var divId = "trainInfoDiv"+i;
    		var trainNumSpanId = "trainInfoTrainNumSpan"+i;
    		var trainTypeSpanId = "trainInfoTrainTypeSpan"+i;
    		var trainNameSpanId = "trainInfoTrainNameSpan"+i;
    		var trainNameNumSpanId = "trainInfoTrainNameNumSpan"+i;
    		var destinatioSpanId = "trainInfoDestinationSpan"+i;
    		
    		document.getElementById(trainNumSpanId).innerHTML = "";
    		document.getElementById(trainTypeSpanId).innerHTML = "";
    		document.getElementById(trainNameSpanId).innerHTML = "";
    		document.getElementById(trainNameNumSpanId).innerHTML = "";
    		document.getElementById(destinatioSpanId).innerHTML = "";
    		document.getElementById(imgId).src = "./JR西日本 北陸本線 (米原〜直江津) 列車在線ビューア_files/non.png";
    		
    		i++
    	}
    		
    	//その他の本数をカウント
    	var otherTrainCount = trainExistData.length;
    	
    	for(i=0 ; i<trainTypeColor.length ; i++)
    	{
    		otherTrainCount -= existCount[trainTypeColor[i][0]];
    	}
    
    	//otherTrainCount -= existCount["普通"];
    	//otherTrainCount -= existCount["快速"];
    	
    	var output = "";
    	output += "在線: ";
    	output += trainExistData.length + "本<span style='font-size:50%;'> ▼</span>";
    	
    	//総計のみ表示するDIV
    	document.getElementById("mainRemainTrainCountSpan").innerHTML = output;
    
    	
    	var output = "";
    	output += "<span id='' class='buttonClass' onclick='updateRemainTrainCountDialog()'>";
    	output += "在線: ";
    	output += trainExistData.length + "本<span style='font-size:50%;'> ▲</span></span><br />";
    	output += "<br />";
    	
    	for(i=0 ; i<trainTypeColor.length ; i++)
    	{
    		
    		var typeNameBuff = trainTypeColor[i][0];
    		var typeColor0Buff = trainTypeColor[i][1][0];
    		var typeColor1Buff = trainTypeColor[i][1][1];
    		
    		output += "<span style='color:"+typeColor1Buff+"; background-color:"+typeColor0Buff+";'>"+typeNameBuff+"</span>: ";
    		
    		output += existCount[typeNameBuff] + "本<br />";
    	}
    	output += "その他:"+otherTrainCount+"本<br />";
    	output += "";
    	output += "";
    	
    	//表示してる列車の本数を表示
    	document.getElementById("detailRemainTrainCountDialogDiv").innerHTML = output;
    
    }
    
    
    
    
    
    //与えられた2駅間の距離を計算
    function getDistance(sta1, sta2)
    {
    	//大→小の順だと都合がわるいので入れ替える
    	if(sta1 > sta2)
    	{
    		var buff = sta1;
    		sta1 = sta2;
    		sta2 = buff;
    	}
    		
    	var distance = 0;
    	
    	var i=0;
    	for(i = sta1 ; i < sta2 ; i++)
    	{
    		distance += betweenDistance[i];
    	}
    	
    	return distance;
    }
    
    var updateIntervalTimer;
    
    //自動更新間隔を変更
    function changeUpdateInterval()
    {
    	var index = document.form1.updateIntervalSelect.selectedIndex; //選択しているインデックス番号を取得
    	var name = document.form1.updateIntervalSelect.options[index].value; //そのインデックス番号のvalueの値を取得
    	
    	var time = name * 1000;
    	
    	//まず最初に再読み込み
    	setNowTime();
    	//もしタイマーが事前にかかっていたら、止める
    	clearInterval(updateIntervalTimer);
    	//新たにタイマーを設定
    	updateIntervalTimer = setInterval("setNowTime()", time);
    }
    
    //ウインドウの大きさに合わせて枠をリアルタイムで変更する
    function setDisplayArea()
    {
    	getWindowSize();
    	
    	//描画エリアの横幅
    	document.getElementById("drawAreaDiv").style.width = windowWidth - 30 + "px";
    	
    	//右上・右下のボタンの位置
    	document.getElementById("expansionButtonDiv").style.left = windowWidth - 0 - 200 + "px";
    	document.getElementById("rigntBottomButtonDiv").style.left = windowWidth - 0 - 260 + "px";
    	
    	//各駅の時刻の欄
    	document.getElementById("staTimetableTimeTitle0Div").style.width = (windowWidth - 30) / 2 - 30 + "px";
    	document.getElementById("staTimetableTimeTitle1Div").style.width = (windowWidth - 30) / 2 - 30 + "px";
    	document.getElementById("staTimetableTime0Div").style.width = (windowWidth - 30) / 2 - 30 + "px";
    	document.getElementById("staTimetableTime1Div").style.width = (windowWidth - 30) / 2 - 30 + "px";
    	
    	document.getElementById("staTimetableTimeTitle0Div").style.left = 0 + "px";
    	document.getElementById("staTimetableTimeTitle1Div").style.left = (windowWidth - 30) / 2 + "px";
    	document.getElementById("staTimetableTime0Div").style.left = 0 + "px";
    	document.getElementById("staTimetableTime1Div").style.left = (windowWidth - 30) / 2 + "px";
    	
    
    }
    
    //ウインドウの横幅の大きさを取得する
    function getWindowSize()
    {
    	browserName = navigator.appName; //ブラウザ名取得
    	if(browserName == "Microsoft Internet Explorer")
    	{
    		//IEの場合
    		windowWidth = document.documentElement.clientWidth;
    		windowHeight = document.documentElement.clientHeight;
    	}
    	else
    	{
    		//IE以外の場合
    		windowWidth = window.innerWidth;
    		windowHeight = window.innerHeight;
    	}
    }
    
    
    //駅から発車する列車の時刻を取得する
    function getStationTimetable(currentStaNum)
    {
    	//alert(currentStaNum);
    	
    	stationTimetableArrayKey = new Array();
    	
    	stationTimetableArrayKey[currentStaNum] = new Array();
    	stationTimetableArrayKey[currentStaNum]["下り"] = new Array();
    	stationTimetableArrayKey[currentStaNum]["上り"] = new Array();
    	
    	var i=0;
    	var trainCount = new Array;
    	trainCount["下り"] = 0;
    	trainCount["上り"] = 0;
    	for(i=0 ; i<trainBasicData.length ; i++)
    	{		
    		arrayKey = timeTableArrayKey[i];
    		
    		//運転日が一致する場合のみ続ける
    		//if(timeTable[arrayKey]["運転日"] != "平日" && timeTable[arrayKey]["運転日"] != "全日")
    		if(!judgeTrainRunningDay(timeTable[arrayKey]["運転日"]))
    			continue;
    		
    		//駅の時刻がちゃんと入力されていて
    		//、かつ終着駅=大阪駅でない場合  && timeTable[arrayKey]["行先"] != stationList[currentStaNum]
    		if(timeTable[arrayKey]["駅時刻"][currentStaNum]["着"] >= 0  )
    		{
    			var direction = timeTable[arrayKey]["方向"];
    			//列車番号+運転日を記録
    			stationTimetableArrayKey[currentStaNum][direction][trainCount[direction]] = arrayKey;
    			
    			//カウント
    			trainCount[direction]++;
    			
    			//alert(arrayKey + " は " + stationList[currentStaNum] + "駅で " + timeTable[arrayKey]["駅時刻"][stationList[currentStaNum]]["着"] + "〜" + timeTable[arrayKey]["駅時刻"][stationList[currentStaNum]]["発"]);
    			//stationTimetableArrayKey[19][trainCount]
    			//trainCount++;
    		}
    	}
    	
    	
    	
    	
    	
    	
    	
    	//alert(stationList[currentStaNum])
    	//alert(stationTimetableArrayKey[currentStaNum]["下り"].length +"本を入れ替えよう");
    	
    	////////発車時刻の順にクイックソートで並び替える
    	var i, j, k;
    	for(i = 0 ; i<directionNameAry.length ; i++)
    	{
    		var currentDirection = directionNameAry[i];
    		
    		var buff = ""; //データを一時的に避難させておくところ
    		
    		for(j=stationTimetableArrayKey[currentStaNum][currentDirection].length-1 ; j>=0 ; j--)
    		{
    			for(k=0 ; k<j ; k++)
    			{
    				//時刻の大小関係が逆だったら、入れ替える
    				//クイックソート
    				//入れ替える対象は
    				var arrayKeyA = stationTimetableArrayKey[currentStaNum][currentDirection][k];
    				var arrayKeyB = stationTimetableArrayKey[currentStaNum][currentDirection][k+1];
    				
    				//alert(arrayKeyA);
    				//alert(arrayKeyB);
    				
    				if(timeTable[arrayKeyA]["駅時刻"][currentStaNum]["発"] > timeTable[arrayKeyB]["駅時刻"][currentStaNum]["発"])
    				{
    					//入れ替える
    					stationTimetableArrayKey[currentStaNum][currentDirection][k] = arrayKeyB;
    					stationTimetableArrayKey[currentStaNum][currentDirection][k+1] = arrayKeyA;
    				}
    			}
    		}
    	}
    	
    	//alert(stationTimetableArrayKey[currentStaNum]["下り"]);
    
    	
    	//alert(stationTimetableArrayKey[currentStaNum]["下り"].length +"本あるよ");
    
    	
    	
    	
    	//////結果をDIVに出力
    	for(i = 0 ; i<directionNameAry.length ; i++)
    	{
    		var currentDirection = directionNameAry[i];
    		var output = "";
    		output += "";
    		output += "";
    		//output += "<table border='0'>";
    		output += "<div>";
    		output += "";
    		output += "";
    		output += "";
    		
    		nextTrainHeight = ""; //次発の列車の縦位置を記録する変数
    		divTop = 0; //1行ごとに20ずつ増やしていく
    		
    		for(j=0 ; j < stationTimetableArrayKey[currentStaNum][currentDirection].length ; j++)
    		{
    			var currentArrayKey = stationTimetableArrayKey[currentStaNum][currentDirection][j];
    			//alert(currentArrayKey);
    			//document.getElementById("staTimetableTimeDiv").innerHTML += i+"本目 "+currentArrayKey+"<br />";
    			//output += "<tr style='white-space:nowrap; height:25px; '>";
    			
    			var bgColor = getTypeColor(timeTable[currentArrayKey]["種別"], 0);
    			var color = getTypeColor(timeTable[currentArrayKey]["種別"], 1);
    			
    			output += "<div style='position:absolute; top:"+divTop+"px; left:0px; width:60px; text-align:center;'><span style='color:"+color+"; background-color:"+bgColor+"'>" + timeTable[currentArrayKey]["列車番号"] + "</span></div>";
    			output += "<div style='position:absolute; top:"+divTop+"px; left:40px; width:120px; text-align:center;'><span style='color:"+color+"; background-color:"+bgColor+"'>" + timeTable[currentArrayKey]["種別"] + "</span></div>";
    			
    			//着時刻と発時刻が異なる場合、つまりその駅に停車する場合
    			if(timeTable[currentArrayKey]["駅時刻"][currentStaNum]["着"] != timeTable[currentArrayKey]["駅時刻"][currentStaNum]["発"])
    			{
    				
    				//着時刻
    				var timeOutput = "";
    				var secondSum = timeTable[currentArrayKey]["駅時刻"][currentStaNum]["着"];
    				timeOutput += digitAdjuster(secondToHour(secondSum), "&nbsp;");
    				timeOutput += ":";
    				timeOutput += digitAdjuster(secondToMinute(secondSum), "0");
    				//timeOutput += "<span style='font-size:70%;'> ";
    				//timeOutput += digitAdjuster(secondToSecond(secondSum), "0");
    				//timeOutput += "</span>";
    				timeOutput += "";
    				
    				output += "<div style='position:absolute; top:"+divTop+"px; left:150px; width:70px; text-align:right;'>" + timeOutput + " <span style='font-size:80%; '>着</span></div>";
    				
    				//発時刻
    				var timeOutput = "";
    				var secondSum = timeTable[currentArrayKey]["駅時刻"][currentStaNum]["発"];
    				timeOutput += digitAdjuster(secondToHour(secondSum), "&nbsp;");
    				timeOutput += ":";
    				timeOutput += digitAdjuster(secondToMinute(secondSum), "0");
    				//timeOutput += "<span style='font-size:70%;'> ";
    				//timeOutput += digitAdjuster(secondToSecond(secondSum), "0");
    				//timeOutput += "</span>";
    				timeOutput += "";
    				
    				output += "<div style='position:absolute; top:"+divTop+"px; left:230px; width:70px; text-align:right;'>" + timeOutput + " <span style='font-size:80%; '>発 </span></div>";
    			}
    			else
    			{
    				//その駅を通過する列車の場合
    				var timeOutput = "";
    				var secondSum = timeTable[currentArrayKey]["駅時刻"][currentStaNum]["発"];
    				timeOutput += digitAdjuster(secondToHour(secondSum), "&nbsp;");
    				timeOutput += ":";
    				timeOutput += digitAdjuster(secondToMinute(secondSum), "0");
    				//timeOutput += "<span style='font-size:70%;'> ";
    				//timeOutput += digitAdjuster(secondToSecond(secondSum), "0");
    				//timeOutput += "</span>";
    				timeOutput += "";
    				
    				//output += "<td colspan='2' style='text-align:center;'>" + timeOutput + " 通過</td>";
    				output += "<div style='position:absolute; top:"+divTop+"px; left:230px; width:70px; text-align:center; color:#aaa; '>" + timeOutput + " <span style='font-size:80%; '>通過</span></div>";
    			}
    			
    			//次発の列車の縦位置を特定する
    			var secondSum = timeTable[currentArrayKey]["駅時刻"][currentStaNum]["発"];
    			if(setSecondSum < secondSum && nextTrainHeight == "")
    				nextTrainHeight = divTop - 20;
    			
    			
    			
    			if(timeTable[currentArrayKey]["行先"] != stationList[currentStaNum])
    			{
    				output += "<div style='position:absolute; top:"+divTop+"px; left:310px; width:150px; '>" + timeTable[currentArrayKey]["行先"] + "<span style='font-size:80%;'> 行</span></div>";
    			}
    			else
    			{
    				output += "<div style='position:absolute; top:"+divTop+"px; left:310px; width:80px; '>当駅止まり</div>";
    			}
    			
    			if(timeTable[currentArrayKey]["駅時刻"][currentStaNum]["のりば"] >= 0)
    				output += "<div style='position:absolute; top:"+divTop+"px; left:390px; width:80px; text-align:right;'>" + timeTable[currentArrayKey]["駅時刻"][currentStaNum]["のりば"] + "<span style='font-size:80%;'> 番線</span></div>";
    			else
    				output += "<td></td>";
    			output += "</tr>\n";
    			
    			divTop+= 20;
    
    			
    		}
    		//output += "</table>";
    		output += "</div>";
    		
    		var idName = "staTimetableTime"+i+"Div";
    		if(document.getElementById(idName) != null)
    			document.getElementById(idName).innerHTML = output;
    		
    		//現在時刻へスクロールする
    		if(document.getElementById(idName) != null)
    			document.getElementById(idName).scrollTop = nextTrainHeight;
    
    		
    		var idName = "staTimetableTimeTitle"+i+"Div";
    		if(document.getElementById(idName) != null)
    			document.getElementById(idName).innerHTML = stationList[currentStaNum]+"駅 "+currentDirection+" 時刻表";
    		
    		
    		output += "";
    		output += "";
    		output += "";
    		
    
    	}
    }
    
    
    
    // 曜日を表す列挙型
    // 曜日を表す列挙型
    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,
            WEEKDAY: "weekday",
            HOLIDAY: "holiday",
        };
    
    
    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();
        
        // 現在の年、月、日を取得
    // main.js の judgeDiaDay 関数
    
    //今日が平日ダイヤか休日ダイヤか
        const now = new Date();
        const year = now.getFullYear();
        const month = now.getMonth() + 1;
        const date = now.getDate();
    
        // dayJudge 関数(diaTypeJudge.jsから提供)を呼び出してダイヤタイプを判定し、グローバル変数 diaDay に設定
        // ※ diaDay は main.js のどこかで定義されていると仮定
        diaDay = dayJudge(year, month, date); 
    
        // ★★★ Console Log 挿入箇所 ★★★
        console.log(`【main.js】 judgeDiaDay() がグローバル変数 diaDay に設定:`, diaDay);
        // ★★★ Console Log 挿入箇所 ★★★
    
        // 画面の「平日ダイヤ」「休日ダイヤ」表示を更新
        updateDisplayDiaDay();
        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;
                    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;
                    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_01: return "11月01日ダイヤ";
            case DiaType.NOV_02: return "11月02日ダイヤ";
            case DiaType.NOV_03: return "11月03日ダイヤ";
            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_01: return "#f0a0a0"; // 例:2月12日ダイヤの背景色
            case DiaType.NOV_02: return "#a0f0a0"; // 例:2月11日ダイヤの背景色
            case DiaType.NOV_03: return "#f0a0a0"; // 例:2月12日ダイヤの背景色
            default: return "";
        }
    }
    
    
    function isHoliday(year, month, date) {
        return window.isHolidayOrWeekend(year, month, date);
    }
    function isWeekday(year, month, day) {
        const dayOfWeek = new Date(year, month - 1, day).getDay();
        return dayOfWeek >= 1 && dayOfWeek <= 5;
    }
    
    function isSunday(year, month, date) {
      return window.isHolidayOrSunday(year, month, date); // windowを付けて呼び出す
    }
    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.NOV_30 && isWeekday(setYear, 11, 30)))) {
                    return true; // 水曜日運休の場合
            }
        }
        if ((value === "休日")||(value === "休日運転")) {
            if ((diaDay === DiaType.HOLIDAY)||
               ((diaDay === DiaType.OCT_01 && isSunday(setYear, 10, 1)) ||
                (diaDay === DiaType.OCT_02 && isSunday(setYear, 10, 2)) ||
                (diaDay === DiaType.OCT_03 && isSunday(setYear, 10, 3)) ||
                (diaDay === DiaType.NOV_30 && isSunday(setYear, 11, 30)))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "休日運休") {
            if ((diaDay === DiaType.WEEKDAY)||
               ((diaDay === DiaType.OCT_01 && !isSunday(setYear, 10, 1)) ||
                (diaDay === DiaType.OCT_02 && !isSunday(setYear, 10, 2)) ||
                (diaDay === DiaType.OCT_03 && !isSunday(setYear, 10, 3)) ||
                (diaDay === DiaType.NOV_30 && !isSunday(setYear, 11, 30)))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "土曜・休日") {
            if (((diaDay === DiaType.HOLIDAY))||
               ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
                (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
                (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
                (diaDay === DiaType.NOV_30 && isHoliday(setYear, 11, 30)))) {
                    return true; // 水曜日運休の場合
            }
        }
    if (value === "10月9・12・31日・11月3・21・24日運転") {
       if(!(diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY)&&
           (diaDay === DiaType.OCT_09 ||
            diaDay === DiaType.OCT_12 ||
            diaDay === DiaType.OCT_31 ||
            diaDay === DiaType.NOV_03 ||
            diaDay === DiaType.NOV_21 ||
            diaDay === DiaType.NOV_24)) {
            return true; // 水曜日運休の場合
        }
    }
    
    if (value === "10月12日・11月3・24日運転" && 
         (diaDay === DiaType.OCT_12 || 
          diaDay === DiaType.NOV_03 || 
          diaDay === DiaType.NOV_24)) {
        return true;
    }
    
    if (value === "10月9・12・31日・11月3・21・24日運休") {
        if  ((diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY) ||
           !(diaDay === DiaType.OCT_09||
            diaDay === DiaType.OCT_12||
            diaDay === DiaType.OCT_31||
            diaDay === DiaType.NOV_03||
            diaDay === DiaType.NOV_21||
            diaDay === DiaType.NOV_24)) {
            return true; // 水曜日運休の場合
        }
    }
        if (value === "10月10→12日・11月1→3日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
            (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
        if (value === "10月10→12日・11月1→3・22→24日運転" &&((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||
            (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_22)||(diaDay === DiaType.NOV_23)||(diaDay === DiaType.NOV_24)))
            return true;
    if (value === "10月1日→11月28日運転" &&
        ((diaDay === DiaType.OCT_01) || (diaDay === DiaType.OCT_02) || (diaDay === DiaType.OCT_03) ||
            (diaDay === DiaType.OCT_04) || (diaDay === DiaType.OCT_05) || (diaDay === DiaType.OCT_06) ||
            (diaDay === DiaType.OCT_07) || (diaDay === DiaType.OCT_08) || (diaDay === DiaType.OCT_09) ||
            (diaDay === DiaType.OCT_10) || (diaDay === DiaType.OCT_11) || (diaDay === DiaType.OCT_12) ||
            (diaDay === DiaType.OCT_13) || (diaDay === DiaType.OCT_14) || (diaDay === DiaType.OCT_15) ||
            (diaDay === DiaType.OCT_16) || (diaDay === DiaType.OCT_17) || (diaDay === DiaType.OCT_18) ||
            (diaDay === DiaType.OCT_19) || (diaDay === DiaType.OCT_20) || (diaDay === DiaType.OCT_21) ||
            (diaDay === DiaType.OCT_22) || (diaDay === DiaType.OCT_23) || (diaDay === DiaType.OCT_24) ||
            (diaDay === DiaType.OCT_25) || (diaDay === DiaType.OCT_26) || (diaDay === DiaType.OCT_27) ||
            (diaDay === DiaType.OCT_28) || (diaDay === DiaType.OCT_29) || (diaDay === DiaType.OCT_30) ||
            (diaDay === DiaType.OCT_31) ||
            (diaDay === DiaType.NOV_01) || (diaDay === DiaType.NOV_02) || (diaDay === DiaType.NOV_03) ||
            (diaDay === DiaType.NOV_04) || (diaDay === DiaType.NOV_05) || (diaDay === DiaType.NOV_06) ||
            (diaDay === DiaType.NOV_07) || (diaDay === DiaType.NOV_08) || (diaDay === DiaType.NOV_09) ||
            (diaDay === DiaType.NOV_10) || (diaDay === DiaType.NOV_11) || (diaDay === DiaType.NOV_12) ||
            (diaDay === DiaType.NOV_13) || (diaDay === DiaType.NOV_14) || (diaDay === DiaType.NOV_15) ||
            (diaDay === DiaType.NOV_16) || (diaDay === DiaType.NOV_17) || (diaDay === DiaType.NOV_18) ||
            (diaDay === DiaType.NOV_19) || (diaDay === DiaType.NOV_20) || (diaDay === DiaType.NOV_21) ||
            (diaDay === DiaType.NOV_22) || (diaDay === DiaType.NOV_23) || (diaDay === DiaType.NOV_24) ||
            (diaDay === DiaType.NOV_25) || (diaDay === DiaType.NOV_26) || (diaDay === DiaType.NOV_27) ||
            (diaDay === DiaType.NOV_28))) return true;
    
    if (value === "10月1日→11月28日運休" &&
        (((diaDay === DiaType.WEEKDAY) || (diaDay === DiaType.HOLIDAY)) ||
            ((diaDay === DiaType.NOV_29) || (diaDay === DiaType.NOV_30)))) return true;
        if (value === "10月1日→11月16日運転" && ((diaDay === DiaType.OCT_01)||(diaDay === DiaType.OCT_02)||(diaDay === DiaType.OCT_03)||(diaDay === DiaType.OCT_04)||(diaDay === DiaType.OCT_05)||
            (diaDay === DiaType.OCT_06)||(diaDay === DiaType.OCT_07)||(diaDay === DiaType.OCT_08)||(diaDay === DiaType.OCT_09)||(diaDay === DiaType.OCT_10)||
            (diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||(diaDay === DiaType.OCT_13)||(diaDay === DiaType.OCT_14)||(diaDay === DiaType.OCT_15)||
            (diaDay === DiaType.OCT_16)||(diaDay === DiaType.OCT_17)||(diaDay === DiaType.OCT_18)||(diaDay === DiaType.OCT_19)||(diaDay === DiaType.OCT_20)||
            (diaDay === DiaType.OCT_21)||(diaDay === DiaType.OCT_22)||(diaDay === DiaType.OCT_23)||(diaDay === DiaType.OCT_24)||(diaDay === DiaType.OCT_25)||
            (diaDay === DiaType.OCT_26)||(diaDay === DiaType.OCT_27)||(diaDay === DiaType.OCT_28)||(diaDay === DiaType.OCT_29)||(diaDay === DiaType.OCT_30)||
            (diaDay === DiaType.OCT_31)||
            (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_04)||(diaDay === DiaType.NOV_05)||
            (diaDay === DiaType.NOV_06)||(diaDay === DiaType.NOV_07)||(diaDay === DiaType.NOV_08)||(diaDay === DiaType.NOV_09)||(diaDay === DiaType.NOV_10)||
            (diaDay === DiaType.NOV_11)||(diaDay === DiaType.NOV_12)||(diaDay === DiaType.NOV_13)||(diaDay === DiaType.NOV_14)||(diaDay === DiaType.NOV_15)||
            (diaDay === DiaType.NOV_16))) return true;
        if (value === "11月2・3日運転" && ((diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
        if (value === "10月10・12日・11月1・3・21・23日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_12)||
            (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_03)||
            (diaDay === DiaType.NOV_21)||(diaDay === DiaType.NOV_23))) return true;
        if (value === "10月4・5・18・19日運転" && ((diaDay === DiaType.OCT_04)||(diaDay === DiaType.OCT_05)||
            (diaDay === DiaType.OCT_18)||(diaDay === DiaType.OCT_19))) return true;
        if (value === "10月25・26日・11月8・9・15・16日運転" && ((diaDay === DiaType.OCT_25)||(diaDay === DiaType.OCT_26)||
            (diaDay === DiaType.NOV_08)||(diaDay === DiaType.NOV_09)||(diaDay === DiaType.NOV_15)||(diaDay === DiaType.NOV_16))) return true;
        if (value === "11月1→3日運転" && ((diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03))) return true;
        if (value === "10月12日・11月3日運転" && ((diaDay === DiaType.OCT_12)||(diaDay === DiaType.NOV_03))) return true;
        if (value === "10月10→13日・11月1→4日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_11)||(diaDay === DiaType.OCT_12)||(diaDay === DiaType.OCT_13)||
           (diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_02)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_04))) return true;
        if (value === "10月1日→11月24日の土曜・休日運転") {
            if ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
                (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
                (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
                (diaDay === DiaType.NOV_24 && isHoliday(setYear, 11, 24))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月10・12日・11月1・3・22・24日運転" && ((diaDay === DiaType.OCT_10)||(diaDay === DiaType.OCT_12)||(diaDay === DiaType.OCT_22)||(diaDay === DiaType.NOV_01)||(diaDay === DiaType.NOV_03)||(diaDay === DiaType.NOV_22)||
           (diaDay === DiaType.NOV_24))) return true;
        if (value === "10月5→26日の休日と11月9・16・22・24日運転") {
           if (((diaDay === DiaType.OCT_05 && isSunday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && isSunday(setYear, 10, 6)) ||
                (diaDay === DiaType.OCT_07 && isSunday(setYear, 10, 7)) ||
                (diaDay === DiaType.OCT_08 && isSunday(setYear, 10, 8)) ||
                (diaDay === DiaType.OCT_09 && isSunday(setYear, 10, 9)) ||
                (diaDay === DiaType.OCT_10 && isSunday(setYear, 10, 10)) ||
                (diaDay === DiaType.OCT_11 && isSunday(setYear, 10, 11)) ||
                (diaDay === DiaType.OCT_12 && isSunday(setYear, 10, 12)) ||
                (diaDay === DiaType.OCT_13 && isSunday(setYear, 10, 13)) ||
                (diaDay === DiaType.OCT_14 && isSunday(setYear, 10, 14)) ||
                (diaDay === DiaType.OCT_15 && isSunday(setYear, 10, 15)) ||
                (diaDay === DiaType.OCT_16 && isSunday(setYear, 10, 16)) ||
                (diaDay === DiaType.OCT_17 && isSunday(setYear, 10, 17)) ||
                (diaDay === DiaType.OCT_18 && isSunday(setYear, 10, 18)) ||
                (diaDay === DiaType.OCT_19 && isSunday(setYear, 10, 19)) ||
                (diaDay === DiaType.OCT_20 && isSunday(setYear, 10, 20)) ||
                (diaDay === DiaType.OCT_21 && isSunday(setYear, 10, 21)) ||
                (diaDay === DiaType.OCT_22 && isSunday(setYear, 10, 22)) ||
                (diaDay === DiaType.OCT_23 && isSunday(setYear, 10, 23)) ||
                (diaDay === DiaType.OCT_24 && isSunday(setYear, 10, 24)) ||
                (diaDay === DiaType.OCT_25 && isSunday(setYear, 10, 25)) ||
                (diaDay === DiaType.OCT_26 && isSunday(setYear, 10, 26)))||(diaDay === DiaType.NOV_09)||(diaDay === DiaType.NOV_16)||(diaDay === DiaType.NOV_22)||(diaDay === DiaType.NOV_24)) {
                    return true; // 水曜日運休の場合
            }
        }
    if (value === "10月1日→11月28日の月・水・金・土曜日と10月8日→11・31日→11月3日運転") {
        if (
            (diaDay === DiaType.OCT_01 && isTwilightDown(setYear, 10, 1)) ||
            (diaDay === DiaType.OCT_02 && isTwilightDown(setYear, 10, 2)) ||
            (diaDay === DiaType.OCT_03 && isTwilightDown(setYear, 10, 3)) ||
            (diaDay === DiaType.OCT_04 && isTwilightDown(setYear, 10, 4)) ||
            (diaDay === DiaType.OCT_05 && isTwilightDown(setYear, 10, 5)) ||
            (diaDay === DiaType.OCT_06 && isTwilightDown(setYear, 10, 6)) ||
            (diaDay === DiaType.OCT_07 && isTwilightDown(setYear, 10, 7)) ||
            diaDay === DiaType.OCT_08 ||
            diaDay === DiaType.OCT_09 ||
            diaDay === DiaType.OCT_10 ||
            diaDay === DiaType.OCT_11 ||
            (diaDay === DiaType.OCT_12 && isTwilightDown(setYear, 10, 12)) ||
            (diaDay === DiaType.OCT_13 && isTwilightDown(setYear, 10, 13)) ||
            (diaDay === DiaType.OCT_14 && isTwilightDown(setYear, 10, 14)) ||
            (diaDay === DiaType.OCT_15 && isTwilightDown(setYear, 10, 15)) ||
            (diaDay === DiaType.OCT_16 && isTwilightDown(setYear, 10, 16)) ||
            (diaDay === DiaType.OCT_17 && isTwilightDown(setYear, 10, 17)) ||
            (diaDay === DiaType.OCT_18 && isTwilightDown(setYear, 10, 18)) ||
            (diaDay === DiaType.OCT_19 && isTwilightDown(setYear, 10, 19)) ||
            (diaDay === DiaType.OCT_20 && isTwilightDown(setYear, 10, 20)) ||
            (diaDay === DiaType.OCT_21 && isTwilightDown(setYear, 10, 21)) ||
            (diaDay === DiaType.OCT_22 && isTwilightDown(setYear, 10, 22)) ||
            (diaDay === DiaType.OCT_23 && isTwilightDown(setYear, 10, 23)) ||
            (diaDay === DiaType.OCT_24 && isTwilightDown(setYear, 10, 24)) ||
            (diaDay === DiaType.OCT_25 && isTwilightDown(setYear, 10, 25)) ||
            (diaDay === DiaType.OCT_26 && isTwilightDown(setYear, 10, 26)) ||
            (diaDay === DiaType.OCT_27 && isTwilightDown(setYear, 10, 27)) ||
            (diaDay === DiaType.OCT_28 && isTwilightDown(setYear, 10, 28)) ||
            (diaDay === DiaType.OCT_29 && isTwilightDown(setYear, 10, 29)) ||
            (diaDay === DiaType.OCT_30 && isTwilightDown(setYear, 10, 30)) ||
            diaDay === DiaType.OCT_31 ||
            diaDay === DiaType.NOV_01 ||
            diaDay === DiaType.NOV_02 ||
            diaDay === DiaType.NOV_03 ||
            (diaDay === DiaType.NOV_04 && isTwilightDown(setYear, 11, 4)) ||
            (diaDay === DiaType.NOV_05 && isTwilightDown(setYear, 11, 5)) ||
            (diaDay === DiaType.NOV_06 && isTwilightDown(setYear, 11, 6)) ||
            (diaDay === DiaType.NOV_07 && isTwilightDown(setYear, 11, 7)) ||
            (diaDay === DiaType.NOV_08 && isTwilightDown(setYear, 11, 8)) ||
            (diaDay === DiaType.NOV_09 && isTwilightDown(setYear, 11, 9)) ||
            (diaDay === DiaType.NOV_10 && isTwilightDown(setYear, 11, 10)) ||
            (diaDay === DiaType.NOV_11 && isTwilightDown(setYear, 11, 11)) ||
            (diaDay === DiaType.NOV_12 && isTwilightDown(setYear, 11, 12)) ||
            (diaDay === DiaType.NOV_13 && isTwilightDown(setYear, 11, 13)) ||
            (diaDay === DiaType.NOV_14 && isTwilightDown(setYear, 11, 14)) ||
            (diaDay === DiaType.NOV_15 && isTwilightDown(setYear, 11, 15)) ||
            (diaDay === DiaType.NOV_16 && isTwilightDown(setYear, 11, 16)) ||
            (diaDay === DiaType.NOV_17 && isTwilightDown(setYear, 11, 17)) ||
            (diaDay === DiaType.NOV_18 && isTwilightDown(setYear, 11, 18)) ||
            (diaDay === DiaType.NOV_19 && isTwilightDown(setYear, 11, 19)) ||
            (diaDay === DiaType.NOV_20 && isTwilightDown(setYear, 11, 20)) ||
            (diaDay === DiaType.NOV_21 && isTwilightDown(setYear, 11, 21)) ||
            (diaDay === DiaType.NOV_22 && isTwilightDown(setYear, 11, 22)) ||
            (diaDay === DiaType.NOV_23 && isTwilightDown(setYear, 11, 23)) ||
            (diaDay === DiaType.NOV_24 && isTwilightDown(setYear, 11, 24)) ||
            (diaDay === DiaType.NOV_25 && isTwilightDown(setYear, 11, 25)) ||
            (diaDay === DiaType.NOV_26 && isTwilightDown(setYear, 11, 26)) ||
            (diaDay === DiaType.NOV_27 && isTwilightDown(setYear, 11, 27)) ||
            (diaDay === DiaType.NOV_28 && isTwilightDown(setYear, 11, 28))
        ) {
            return true; // 水曜日運休の場合
        }
    }
    if (value === "10月3日→11月28日の水・金・日・月曜日と10月10→13日・11月2→5日運転") {
        if ((diaDay === DiaType.OCT_04 && isTwilightUp(setYear, 10, 4)) ||
            (diaDay === DiaType.OCT_05 && isTwilightUp(setYear, 10, 5)) ||
            (diaDay === DiaType.OCT_06 && isTwilightUp(setYear, 10, 6)) ||
            (diaDay === DiaType.OCT_07 && isTwilightUp(setYear, 10, 7)) ||
            (diaDay === DiaType.OCT_08 && isTwilightUp(setYear, 10, 8)) ||
            (diaDay === DiaType.OCT_09 && isTwilightUp(setYear, 10, 9)) ||
            diaDay === DiaType.OCT_10 ||
            diaDay === DiaType.OCT_11 ||
            diaDay === DiaType.OCT_12 ||
            diaDay === DiaType.OCT_13 ||
            (diaDay === DiaType.OCT_14 && isTwilightUp(setYear, 10, 14)) ||
            (diaDay === DiaType.OCT_15 && isTwilightUp(setYear, 10, 15)) ||
            (diaDay === DiaType.OCT_16 && isTwilightUp(setYear, 10, 16)) ||
            (diaDay === DiaType.OCT_17 && isTwilightUp(setYear, 10, 17)) ||
            (diaDay === DiaType.OCT_18 && isTwilightUp(setYear, 10, 18)) ||
            (diaDay === DiaType.OCT_19 && isTwilightUp(setYear, 10, 19)) ||
            (diaDay === DiaType.OCT_20 && isTwilightUp(setYear, 10, 20)) ||
            (diaDay === DiaType.OCT_21 && isTwilightUp(setYear, 10, 21)) ||
            (diaDay === DiaType.OCT_22 && isTwilightUp(setYear, 10, 22)) ||
            (diaDay === DiaType.OCT_23 && isTwilightUp(setYear, 10, 23)) ||
            (diaDay === DiaType.OCT_24 && isTwilightUp(setYear, 10, 24)) ||
            (diaDay === DiaType.OCT_25 && isTwilightUp(setYear, 10, 25)) ||
            (diaDay === DiaType.OCT_26 && isTwilightUp(setYear, 10, 26)) ||
            (diaDay === DiaType.OCT_27 && isTwilightUp(setYear, 10, 27)) ||
            (diaDay === DiaType.OCT_28 && isTwilightUp(setYear, 10, 28)) ||
            (diaDay === DiaType.OCT_29 && isTwilightUp(setYear, 10, 29)) ||
            (diaDay === DiaType.OCT_30 && isTwilightUp(setYear, 10, 30)) ||
            (diaDay === DiaType.OCT_31 && isTwilightUp(setYear, 10, 31)) ||
            (diaDay === DiaType.NOV_01 && isTwilightUp(setYear, 11, 1)) ||
            diaDay === DiaType.NOV_02 ||
            diaDay === DiaType.NOV_03 ||
            diaDay === DiaType.NOV_04 ||
            diaDay === DiaType.NOV_05 ||
            (diaDay === DiaType.NOV_05 && isTwilightUp(setYear, 11, 5)) ||
            (diaDay === DiaType.NOV_06 && isTwilightUp(setYear, 11, 6)) ||
            (diaDay === DiaType.NOV_07 && isTwilightUp(setYear, 11, 7)) ||
            (diaDay === DiaType.NOV_08 && isTwilightUp(setYear, 11, 8)) ||
            (diaDay === DiaType.NOV_09 && isTwilightUp(setYear, 11, 9)) ||
            (diaDay === DiaType.NOV_10 && isTwilightUp(setYear, 11, 10)) ||
            (diaDay === DiaType.NOV_11 && isTwilightUp(setYear, 11, 11)) ||
            (diaDay === DiaType.NOV_12 && isTwilightUp(setYear, 11, 12)) ||
            (diaDay === DiaType.NOV_13 && isTwilightUp(setYear, 11, 13)) ||
            (diaDay === DiaType.NOV_14 && isTwilightUp(setYear, 11, 14)) ||
            (diaDay === DiaType.NOV_15 && isTwilightUp(setYear, 11, 15)) ||
            (diaDay === DiaType.NOV_16 && isTwilightUp(setYear, 11, 16)) ||
            (diaDay === DiaType.NOV_17 && isTwilightUp(setYear, 11, 17)) ||
            (diaDay === DiaType.NOV_18 && isTwilightUp(setYear, 11, 18)) ||
            (diaDay === DiaType.NOV_19 && isTwilightUp(setYear, 11, 19)) ||
            (diaDay === DiaType.NOV_20 && isTwilightUp(setYear, 11, 20)) ||
            (diaDay === DiaType.NOV_21 && isTwilightUp(setYear, 11, 21)) ||
            (diaDay === DiaType.NOV_22 && isTwilightUp(setYear, 11, 22)) ||
            (diaDay === DiaType.NOV_23 && isTwilightUp(setYear, 11, 23)) ||
            (diaDay === DiaType.NOV_24 && isTwilightUp(setYear, 11, 24)) ||
            (diaDay === DiaType.NOV_25 && isTwilightUp(setYear, 11, 25)) ||
            (diaDay === DiaType.NOV_26 && isTwilightUp(setYear, 11, 26)) ||
            (diaDay === DiaType.NOV_27 && isTwilightUp(setYear, 11, 27)) ||
            (diaDay === DiaType.NOV_28 && isTwilightUp(setYear, 11, 28))
        ) {
            return true; // 水曜日運休の場合
        }
    }
        if (value === "10月3・9・10・17・24日・31日・11月1日運転" && ((diaDay === DiaType.OCT_03)||
            (diaDay === DiaType.OCT_09)||(diaDay === DiaType.OCT_10)||
            (diaDay === DiaType.OCT_17)||(diaDay === DiaType.OCT_24)||(diaDay === DiaType.OCT_31)||
            (diaDay === DiaType.NOV_01))) return true;
        if (value === "10月8・9・13→31日・11月4→26日の水曜日運転") {
            if ((diaDay === DiaType.OCT_08 && isWednesday(setYear, 10, 8)) ||
                (diaDay === DiaType.OCT_09 && isWednesday(setYear, 10, 9)) ||
                (diaDay === DiaType.OCT_13 && isWednesday(setYear, 10, 13)) ||
                (diaDay === DiaType.OCT_14 && isWednesday(setYear, 10, 14)) ||
                (diaDay === DiaType.OCT_15 && isWednesday(setYear, 10, 15)) ||
                (diaDay === DiaType.OCT_16 && isWednesday(setYear, 10, 16)) ||
                (diaDay === DiaType.OCT_17 && isWednesday(setYear, 10, 17)) ||
                (diaDay === DiaType.OCT_18 && isWednesday(setYear, 10, 18)) ||
                (diaDay === DiaType.OCT_19 && isWednesday(setYear, 10, 19)) ||
                (diaDay === DiaType.OCT_20 && isWednesday(setYear, 10, 20)) ||
                (diaDay === DiaType.OCT_21 && isWednesday(setYear, 10, 21)) ||
                (diaDay === DiaType.OCT_22 && isWednesday(setYear, 10, 22)) ||
                (diaDay === DiaType.OCT_23 && isWednesday(setYear, 10, 23)) ||
                (diaDay === DiaType.OCT_24 && isWednesday(setYear, 10, 24)) ||
                (diaDay === DiaType.OCT_25 && isWednesday(setYear, 10, 25)) ||
                (diaDay === DiaType.OCT_26 && isWednesday(setYear, 10, 26)) ||
                (diaDay === DiaType.OCT_27 && isWednesday(setYear, 10, 27)) ||
                (diaDay === DiaType.OCT_28 && isWednesday(setYear, 10, 28)) ||
                (diaDay === DiaType.OCT_29 && isWednesday(setYear, 10, 29)) ||
                (diaDay === DiaType.OCT_30 && isWednesday(setYear, 10, 30)) ||
                (diaDay === DiaType.OCT_31 && isWednesday(setYear, 10, 31)) ||
                (diaDay === DiaType.NOV_04 && isWednesday(setYear, 11, 4)) ||
                (diaDay === DiaType.NOV_05 && isWednesday(setYear, 11, 5)) ||
                (diaDay === DiaType.NOV_06 && isWednesday(setYear, 11, 6)) ||
                (diaDay === DiaType.NOV_07 && isWednesday(setYear, 11, 7)) ||
                (diaDay === DiaType.NOV_08 && isWednesday(setYear, 11, 8)) ||
                (diaDay === DiaType.NOV_09 && isWednesday(setYear, 11, 9)) ||
                (diaDay === DiaType.NOV_10 && isWednesday(setYear, 11, 10)) ||
                (diaDay === DiaType.NOV_11 && isWednesday(setYear, 11, 11)) ||
                (diaDay === DiaType.NOV_12 && isWednesday(setYear, 11, 12)) ||
                (diaDay === DiaType.NOV_13 && isWednesday(setYear, 11, 13)) ||
                (diaDay === DiaType.NOV_14 && isWednesday(setYear, 11, 14)) ||
                (diaDay === DiaType.NOV_15 && isWednesday(setYear, 11, 15)) ||
                (diaDay === DiaType.NOV_16 && isWednesday(setYear, 11, 16)) ||
                (diaDay === DiaType.NOV_17 && isWednesday(setYear, 11, 17)) ||
                (diaDay === DiaType.NOV_18 && isWednesday(setYear, 11, 18)) ||
                (diaDay === DiaType.NOV_19 && isWednesday(setYear, 11, 19)) ||
                (diaDay === DiaType.NOV_20 && isWednesday(setYear, 11, 20)) ||
                (diaDay === DiaType.NOV_21 && isWednesday(setYear, 11, 21)) ||
                (diaDay === DiaType.NOV_22 && isWednesday(setYear, 11, 22)) ||
                (diaDay === DiaType.NOV_23 && isWednesday(setYear, 11, 23)) ||
                (diaDay === DiaType.NOV_24 && isWednesday(setYear, 11, 24)) ||
                (diaDay === DiaType.NOV_25 && isWednesday(setYear, 11, 25)) ||
                (diaDay === DiaType.NOV_26 && isWednesday(setYear, 11, 26))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月8・9・13→31日・11月4→26日の水曜日運休") {
            if ((diaDay === DiaType.OCT_08 && !isWednesday(setYear, 10, 8)) ||
                (diaDay === DiaType.OCT_09 && !isWednesday(setYear, 10, 9)) ||
                (diaDay === DiaType.OCT_13 && !isWednesday(setYear, 10, 13)) ||
                (diaDay === DiaType.OCT_14 && !isWednesday(setYear, 10, 14)) ||
                (diaDay === DiaType.OCT_15 && !isWednesday(setYear, 10, 15)) ||
                (diaDay === DiaType.OCT_16 && !isWednesday(setYear, 10, 16)) ||
                (diaDay === DiaType.OCT_17 && !isWednesday(setYear, 10, 17)) ||
                (diaDay === DiaType.OCT_18 && !isWednesday(setYear, 10, 18)) ||
                (diaDay === DiaType.OCT_19 && !isWednesday(setYear, 10, 19)) ||
                (diaDay === DiaType.OCT_20 && !isWednesday(setYear, 10, 20)) ||
                (diaDay === DiaType.OCT_21 && !isWednesday(setYear, 10, 21)) ||
                (diaDay === DiaType.OCT_22 && !isWednesday(setYear, 10, 22)) ||
                (diaDay === DiaType.OCT_23 && !isWednesday(setYear, 10, 23)) ||
                (diaDay === DiaType.OCT_24 && !isWednesday(setYear, 10, 24)) ||
                (diaDay === DiaType.OCT_25 && !isWednesday(setYear, 10, 25)) ||
                (diaDay === DiaType.OCT_26 && !isWednesday(setYear, 10, 26)) ||
                (diaDay === DiaType.OCT_27 && !isWednesday(setYear, 10, 27)) ||
                (diaDay === DiaType.OCT_28 && !isWednesday(setYear, 10, 28)) ||
                (diaDay === DiaType.OCT_29 && !isWednesday(setYear, 10, 29)) ||
                (diaDay === DiaType.OCT_30 && !isWednesday(setYear, 10, 30)) ||
                (diaDay === DiaType.OCT_31 && !isWednesday(setYear, 10, 31)) ||
                (diaDay === DiaType.NOV_04 && !isWednesday(setYear, 11, 4)) ||
                (diaDay === DiaType.NOV_05 && !isWednesday(setYear, 11, 5)) ||
                (diaDay === DiaType.NOV_06 && !isWednesday(setYear, 11, 6)) ||
                (diaDay === DiaType.NOV_07 && !isWednesday(setYear, 11, 7)) ||
                (diaDay === DiaType.NOV_08 && !isWednesday(setYear, 11, 8)) ||
                (diaDay === DiaType.NOV_09 && !isWednesday(setYear, 11, 9)) ||
                (diaDay === DiaType.NOV_10 && !isWednesday(setYear, 11, 10)) ||
                (diaDay === DiaType.NOV_11 && !isWednesday(setYear, 11, 11)) ||
                (diaDay === DiaType.NOV_12 && !isWednesday(setYear, 11, 12)) ||
                (diaDay === DiaType.NOV_13 && !isWednesday(setYear, 11, 13)) ||
                (diaDay === DiaType.NOV_14 && !isWednesday(setYear, 11, 14)) ||
                (diaDay === DiaType.NOV_15 && !isWednesday(setYear, 11, 15)) ||
                (diaDay === DiaType.NOV_16 && !isWednesday(setYear, 11, 16)) ||
                (diaDay === DiaType.NOV_17 && !isWednesday(setYear, 11, 17)) ||
                (diaDay === DiaType.NOV_18 && !isWednesday(setYear, 11, 18)) ||
                (diaDay === DiaType.NOV_19 && !isWednesday(setYear, 11, 19)) ||
                (diaDay === DiaType.NOV_20 && !isWednesday(setYear, 11, 20)) ||
                (diaDay === DiaType.NOV_21 && !isWednesday(setYear, 11, 21)) ||
                (diaDay === DiaType.NOV_22 && !isWednesday(setYear, 11, 22)) ||
                (diaDay === DiaType.NOV_23 && !isWednesday(setYear, 11, 23)) ||
                (diaDay === DiaType.NOV_24 && !isWednesday(setYear, 11, 24)) ||
                (diaDay === DiaType.NOV_25 && !isWednesday(setYear, 11, 25)) ||
                (diaDay === DiaType.NOV_26 && !isWednesday(setYear, 11, 26))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月10→12日・11月1→3日の水曜日運転") {
            if ((diaDay === DiaType.OCT_10 && isWednesday(setYear, 10, 10)) ||
                (diaDay === DiaType.OCT_11 && isWednesday(setYear, 10, 11)) ||
                (diaDay === DiaType.OCT_12 && isWednesday(setYear, 10, 12)) ||
                (diaDay === DiaType.NOV_01 && isWednesday(setYear, 11, 1)) ||
                (diaDay === DiaType.NOV_02 && isWednesday(setYear, 11, 2)) ||
                (diaDay === DiaType.NOV_03 && isWednesday(setYear, 11, 3))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月10→12日・11月1→3日の水曜日運休") {
            if ((diaDay === DiaType.OCT_10 && !isWednesday(setYear, 10, 10)) ||
                (diaDay === DiaType.OCT_11 && !isWednesday(setYear, 10, 11)) ||
                (diaDay === DiaType.OCT_12 && !isWednesday(setYear, 10, 12)) ||
                (diaDay === DiaType.NOV_01 && !isWednesday(setYear, 11, 1)) ||
                (diaDay === DiaType.NOV_02 && !isWednesday(setYear, 11, 2)) ||
                (diaDay === DiaType.NOV_03 && !isWednesday(setYear, 11, 3))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月8日→11月26日の水曜日運転") {
            if ((diaDay === DiaType.OCT_08 && isWednesday(setYear, 10, 8)) ||
                (diaDay === DiaType.OCT_09 && isWednesday(setYear, 10, 9)) ||
                (diaDay === DiaType.OCT_10 && isWednesday(setYear, 10, 10)) ||
                (diaDay === DiaType.NOV_26 && isWednesday(setYear, 11, 26)) ) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月8日→11月26日の水曜日運休") {
            if ((diaDay === DiaType.OCT_08 && !isWednesday(setYear, 10, 8)) ||
                (diaDay === DiaType.OCT_09 && !isWednesday(setYear, 10, 9)) ||
                (diaDay === DiaType.OCT_10 && !isWednesday(setYear, 10, 10)) ||
                (diaDay === DiaType.NOV_26 && !isWednesday(setYear, 11, 26)) ) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月4日→11月24日の土曜・休日を除く毎日運転") {
            if (((diaDay === DiaType.WEEKDAY)||(diaDay === DiaType.HOLIDAY)) &&
              !((diaDay === DiaType.OCT_04 && isHoliday(setYear, 10, 4)) ||
                (diaDay === DiaType.OCT_05 && isHoliday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && isHoliday(setYear, 10, 6)) ||
               (diaDay === DiaType.NOV_24 && isHoliday(setYear, 11, 24)))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月4日→11月24日の土曜・休日運転") {
            if(!(diaDay === DiaType.WEEKDAY || diaDay === DiaType.HOLIDAY)&&
               ((diaDay === DiaType.OCT_04 && isHoliday(setYear, 10, 4)) ||
                (diaDay === DiaType.OCT_05 && isHoliday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && isHoliday(setYear, 10, 6)) ||
                (diaDay === DiaType.NOV_24 && isHoliday(setYear, 11, 24)))) {
                    return true; // 水曜日運休の場合
            }
        }
        if (value === "10月4日→11月24日を除く土曜・休日運転") {
            if (((diaDay === DiaType.HOLIDAY))||
               ((diaDay === DiaType.OCT_01 && isHoliday(setYear, 10, 1)) ||
                (diaDay === DiaType.OCT_02 && isHoliday(setYear, 10, 2)) ||
                (diaDay === DiaType.OCT_03 && isHoliday(setYear, 10, 3)) ||
                (diaDay === DiaType.NOV_25 && isHoliday(setYear, 11, 25)) ||
                (diaDay === DiaType.NOV_26 && isHoliday(setYear, 11, 26)) ||
                (diaDay === DiaType.NOV_27 && isHoliday(setYear, 11, 27)) ||
                (diaDay === DiaType.NOV_28 && isHoliday(setYear, 11, 28)) ||
                (diaDay === DiaType.NOV_29 && isHoliday(setYear, 11, 29)) ||
                (diaDay === DiaType.NOV_30 && isHoliday(setYear, 11, 30)) ||
                (diaDay === DiaType.NOV_31 && isHoliday(setYear, 11, 31)))) {
                    return true; // 水曜日運休の場合
            }
        }
      if (value === "10月5日→11月24日の休日運転") {
             if((diaDay === DiaType.OCT_05 && isHoliday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && isHoliday(setYear, 10, 6)) ||
                (diaDay === DiaType.OCT_07 && isHoliday(setYear, 10, 7)) ||
                (diaDay === DiaType.NOV_24 && isHoliday(setYear, 11, 24))){
                    return true; // 水曜日運休の場合
            }
        }
    if (
      value === "10月10→12日・11月1→3・22→24日を除く毎日運転" &&
      ((diaDay === DiaType.WEEKDAY) || (diaDay === DiaType.HOLIDAY)) &&
      !(
        (diaDay === DiaType.OCT_10) ||
        (diaDay === DiaType.OCT_11) ||
        (diaDay === DiaType.OCT_12) ||
        (diaDay === DiaType.NOV_01) ||
        (diaDay === DiaType.NOV_02) ||
        (diaDay === DiaType.NOV_03) ||
        (diaDay === DiaType.NOV_22) ||
        (diaDay === DiaType.NOV_23) ||
        (diaDay === DiaType.NOV_24)
      )
    )
      return true;    
         if (value === "10月5日→11月9日の休日運転") {
             if((diaDay === DiaType.OCT_05 && isSunday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && isSunday(setYear, 10, 6)) ||
                (diaDay === DiaType.OCT_07 && isSunday(setYear, 10, 7)) ||
                (diaDay === DiaType.NOV_09 && isSunday(setYear, 11, 9))) {
                    return true; // 水曜日運休の場合
            }
        }
       if (value === "10月5日→11月9日の休日を除く毎日運転") {
           if (((diaDay === DiaType.WEEKDAY)||(diaDay === DiaType.HOLIDAY))||
               ((diaDay === DiaType.OCT_05 && !isSunday(setYear, 10, 5)) ||
                (diaDay === DiaType.OCT_06 && !isSunday(setYear, 10, 6)) ||
                (diaDay === DiaType.OCT_07 && !isSunday(setYear, 10, 7)) ||
                (diaDay === DiaType.NOV_09 && !isSunday(setYear, 11, 9)))) {
            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.OCT_04: diaDay = DiaType.OCT_05; break;
            case DiaType.OCT_05: diaDay = DiaType.OCT_06; break;
            case DiaType.OCT_06: diaDay = DiaType.OCT_07; break;
            case DiaType.OCT_07: diaDay = DiaType.OCT_08; break;
            case DiaType.OCT_08: diaDay = DiaType.OCT_09; break;
            case DiaType.OCT_09: diaDay = DiaType.OCT_10; break;
            case DiaType.OCT_10: diaDay = DiaType.OCT_11; break;
            case DiaType.OCT_11: diaDay = DiaType.OCT_12; break;
            case DiaType.OCT_12: diaDay = DiaType.OCT_13; break;
            case DiaType.OCT_13: diaDay = DiaType.OCT_14; break;
            case DiaType.OCT_14: diaDay = DiaType.OCT_15; break;
            case DiaType.OCT_15: diaDay = DiaType.OCT_16; break;
            case DiaType.OCT_16: diaDay = DiaType.OCT_17; break;
            case DiaType.OCT_17: diaDay = DiaType.OCT_18; break;
            case DiaType.OCT_18: diaDay = DiaType.OCT_19; break;
            case DiaType.OCT_19: diaDay = DiaType.OCT_20; break;
            case DiaType.OCT_20: diaDay = DiaType.OCT_21; break;
            case DiaType.OCT_21: diaDay = DiaType.OCT_22; break;
            case DiaType.OCT_22: diaDay = DiaType.OCT_23; break;
            case DiaType.OCT_23: diaDay = DiaType.OCT_24; break;
            case DiaType.OCT_24: diaDay = DiaType.OCT_25; break;
            case DiaType.OCT_25: diaDay = DiaType.OCT_26; break;
            case DiaType.OCT_26: diaDay = DiaType.OCT_27; break;
            case DiaType.OCT_27: diaDay = DiaType.OCT_28; break;
            case DiaType.OCT_28: diaDay = DiaType.OCT_29; break;
            case DiaType.OCT_29: diaDay = DiaType.OCT_30; break;
            case DiaType.OCT_30: diaDay = DiaType.OCT_31; break;
            case DiaType.OCT_31: diaDay = DiaType.NOV_01; break;
            case DiaType.NOV_01: diaDay = DiaType.NOV_02; break;
            case DiaType.NOV_02: diaDay = DiaType.NOV_03; break;
            case DiaType.NOV_03: diaDay = DiaType.NOV_04; break;
            case DiaType.NOV_04: diaDay = DiaType.NOV_05; break;
            case DiaType.NOV_05: diaDay = DiaType.NOV_06; break;
            case DiaType.NOV_06: diaDay = DiaType.NOV_07; break;
            case DiaType.NOV_07: diaDay = DiaType.NOV_08; break;
            case DiaType.NOV_08: diaDay = DiaType.NOV_09; break;
            case DiaType.NOV_09: diaDay = DiaType.NOV_10; break;
            case DiaType.NOV_10: diaDay = DiaType.NOV_11; break;
            case DiaType.NOV_11: diaDay = DiaType.NOV_12; break;
            case DiaType.NOV_12: diaDay = DiaType.NOV_13; break;
            case DiaType.NOV_13: diaDay = DiaType.NOV_14; break;
            case DiaType.NOV_14: diaDay = DiaType.NOV_15; break;
            case DiaType.NOV_15: diaDay = DiaType.NOV_16; break;
            case DiaType.NOV_16: diaDay = DiaType.NOV_17; break;
            case DiaType.NOV_17: diaDay = DiaType.NOV_18; break;
            case DiaType.NOV_18: diaDay = DiaType.NOV_19; break;
            case DiaType.NOV_19: diaDay = DiaType.NOV_20; break;
            case DiaType.NOV_20: diaDay = DiaType.NOV_21; break;
            case DiaType.NOV_21: diaDay = DiaType.NOV_22; break;
            case DiaType.NOV_22: diaDay = DiaType.NOV_23; break;
            case DiaType.NOV_23: diaDay = DiaType.NOV_24; break;
            case DiaType.NOV_24: diaDay = DiaType.NOV_25; break;
            case DiaType.NOV_25: diaDay = DiaType.NOV_26; break;
            case DiaType.NOV_26: diaDay = DiaType.NOV_27; break;
            case DiaType.NOV_27: diaDay = DiaType.NOV_28; break;
            case DiaType.NOV_28: diaDay = DiaType.NOV_29; break;
            case DiaType.NOV_29: diaDay = DiaType.NOV_30; 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 trainTypeColor[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);
    }
    
  21. このコードをどのように使って、どのような確認をすると問題の再現ができますか?

  22. @sembokulove

    Questioner

    おはようございます。
    勝手ながら早朝深夜のため、ご返信をお待たせしたこと、深く陳謝します。
    また、勝手ながらまたも長文となります。
    当方で確認したところ、
    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;
    

    に変更し、
    また、ここにはまだ挙げていないですが、
    diatypejudgeファイルの

    (function() { // Start of the IIFE
    
        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,
        OCT_04: 3,
        OCT_05: 4,
        OCT_06: 5,
        OCT_07: 6,
        OCT_08: 7,
        OCT_09: 8,
        OCT_10: 9,
        OCT_11: 10,
        OCT_12: 11,
        OCT_13: 12,
        OCT_14: 13,
        OCT_15: 14,
        OCT_16: 15,
        OCT_17: 16,
        OCT_18: 17,
        OCT_19: 18,
        OCT_20: 19,
        OCT_21: 20,
        OCT_22: 21,
        OCT_23: 22,
        OCT_24: 23,
        OCT_25: 24,
        OCT_26: 25,
        OCT_27: 26,
        OCT_28: 27,
        OCT_29: 28,
        OCT_30: 29,
        OCT_31: 30,
        NOV_01: 31,
        NOV_02: 32,
        NOV_03: 33,
        NOV_04: 34,
        NOV_05: 35,
        NOV_06: 36,
        NOV_07: 37,
        NOV_08: 38,
        NOV_09: 39,
        NOV_10: 40,
        NOV_11: 41,
        NOV_12: 42,
        NOV_13: 43,
        NOV_14: 44,
        NOV_15: 45,
        NOV_16: 46,
        NOV_17: 47,
        NOV_18: 48,
        NOV_19: 49,
        NOV_20: 50,
        NOV_21: 51,
        NOV_22: 52,
        NOV_23: 53,
        NOV_24: 54,
        NOV_25: 55,
        NOV_26: 56,
        NOV_27: 57,
        NOV_28: 58,
        NOV_29: 59,
        NOV_30: 60,
            WEEKDAY: "weekday",
            HOLIDAY: "holiday",
        };
    
        // getNthDayOfMonth などの関数は変更なしで存置
        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 { month: targetDate.getMonth() + 1, date: targetDate.getDate() };
            }
            return null;
        }
    
        function calculateVernalEquinox(year) {
            let day = 20;
            if (year % 4 === 0 && year >= 2000 && year <= 2099) {
                day = 20;
            } else {
                day = 21;
            }
            if (year === 2092 || year === 2096) day = 19;
            if (year === 2056 || year === 2060 || year === 2064 || year === 2068 || year === 2072 || year === 2076 || year === 2080 || year === 2084 || year === 2088) day = 20;
    
            return new Date(year, 2, day);
        }
    
        function calculateAutumnalEquinox(year) {
            let day = 23;
            if (year % 4 === 0 && year >= 2000 && year <= 2099) {
                day = 23;
            } else {
                day = 23;
            }
            if (year === 2012 || year === 2016 || year === 2020 || year === 2024 || year === 2028) day = 22;
    
            return new Date(year, 8, day);
        }
    
        // 固定の祝日リストを定義
        const fixedHolidays = [
            // 月は0-indexedで指定
            { month: 1, date: 1, name: "元日" },
            { month: 2, date: 11, name: "建国記念の日" },
            { month: 2, date: 23, name: "天皇誕生日" },
            { month: 4, date: 29, name: "昭和の日" },
            { month: 5, date: 3, name: "憲法記念日" },
            { month: 5, date: 4, name: "みどりの日" },
            { month: 5, date: 5, name: "こどもの日" },
            { month: 7, date: 20, name: "海の日" }, // 2024年の海の日 例
            { month: 8, date: 11, name: "山の日" },
            { month: 11, date: 3, name: "文化の日" },
            { month: 11, date: 23, name: "勤労感謝の日" },
            // 必要に応じて他の固定祝日を追加
        ];
    
        function getJapaneseHolidays(year) {
            const dynamicHolidays = [];
    
            // ハッピーマンデー制度に基づく祝日
            dynamicHolidays.push(getNthDayOfMonth(year, 1, DayOfWeek.MONDAY, 2)); // 成人の日 (1月第2月曜日)
            dynamicHolidays.push(getNthDayOfMonth(year, 7, DayOfWeek.MONDAY, 3)); // 海の日 (7月第3月曜日)
            dynamicHolidays.push(getNthDayOfMonth(year, 9, DayOfWeek.MONDAY, 3)); // 敬老の日 (9月第3月曜日)
            dynamicHolidays.push(getNthDayOfMonth(year, 10, DayOfWeek.MONDAY, 2)); // スポーツの日 (10月第2月曜日)
    
            // 春分の日
            const equinoxSpring = calculateVernalEquinox(year);
            if (equinoxSpring) {
                dynamicHolidays.push({ month: equinoxSpring.getMonth() + 1, date: equinoxSpring.getDate() });
            }
            // 秋分の日
            const equinoxAutumn = calculateAutumnalEquinox(year);
            if (equinoxAutumn) {
                dynamicHolidays.push({ month: equinoxAutumn.getMonth() + 1, date: equinoxAutumn.getDate() });
            }
    
            return dynamicHolidays.filter(h => h !== null);
        }
    
        /**
         * 指定された日付が日本の祝日または日曜日であるかを判定します。
         * @param {number} year - 年
         * @param {number} month - 月 (1から12)
         * @param {number} date - 日 (1から31)
         * @returns {boolean} 祝日または日曜日の場合はtrue、それ以外はfalse。
         */
        function isHolidayOrSunday(year, month, date) {
            const dateObj = new Date(year, month - 1, date);
            const dayOfWeek = dateObj.getDay();
    
            if (dayOfWeek === DayOfWeek.SUNDAY) {
                return true;
            }
    
            const allHolidaysForYear = [
                ...fixedHolidays,
                ...getJapaneseHolidays(year)
            ];
    
            const isRecognizedHoliday = allHolidaysForYear.some(holiday =>
                holiday.month === month && holiday.date === date
            );
            if (isRecognizedHoliday) {
                return true;
            }
    
            // 振替休日判定
            if (dayOfWeek === DayOfWeek.MONDAY) {
                const previousDay = new Date(year, month - 1, date - 1);
                // 前日が元の月と異なる場合 (例: 3月1日の前日 = 2月29日) を考慮
                const prevDayYear = previousDay.getFullYear();
                const prevDayMonth = previousDay.getMonth() + 1;
                const prevDayDate = previousDay.getDate();
    
                if (previousDay.getDay() === DayOfWeek.SUNDAY) { // 前日が日曜日の場合のみ振替対象
                    const isPreviousDayRecognizedHoliday = allHolidaysForYear.some(holiday =>
                        holiday.month === prevDayMonth && holiday.date === prevDayDate
                    );
                    if (isPreviousDayRecognizedHoliday) {
                        return true;
                    }
                }
            }
            return false;
        }
    
        /**
         * 指定された日付が日本の祝日、日曜日、または土曜日であるかを判定します。
         * @param {number} year - 年
         * @param {number} month - 月 (1から12)
         * @param {number} date - 日 (1から31)
         * @returns {boolean} 祝日、日曜日、または土曜日の場合はtrue、それ以外はfalse。
         */
        function isHolidayOrWeekend(year, month, date) {
            const dateObj = new Date(year, month - 1, date);
            const dayOfWeek = dateObj.getDay();
    
            // まず土曜日かをチェック
            if (dayOfWeek === DayOfWeek.SATURDAY) {
                return true;
            }
    
            // 次に、祝日または日曜日かをチェック(isHolidayOrSunday関数を利用)
            return isHolidayOrSunday(year, month, date);
        }
    
        /**
         * 指定された日付のダイヤタイプを判定します。
         * 特定の日付に設定されたダイヤタイプが優先され、次に祝日・週末、最後に平日が判定されます。
         * @param {number} year - 年
         * @param {number} month - 月 (1から12)
         * @param {number} date - 日 (1から31)
         * @returns {string|number} 判定されたDiaTypeの値。
         */
        const dayJudge = (year, month, date) => {
            // Dateオブジェクトは月が0-indexedなので、調整する
            const d = new Date(year, month - 1, date);
            const dayOfWeek = d.getDay(); // 0: 日曜日, 1: 月曜日, ..., 6: 土曜日
    
            // DiaTypeキーに合わせるための月名のプレフィックス配列 (0-indexed)
            const monthPrefixes = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
            const paddedDate = String(date).padStart(2, '0');
            const specificDiaTypeKey = `${monthPrefixes[month - 1]}_${paddedDate}`;
    
            // 1. 特定の日付がDiaTypeに定義されているかチェック
            if (DiaType[specificDiaTypeKey] !== undefined) {
                return DiaType[specificDiaTypeKey];
            }
    
            // 2. 祝日または週末かをチェック
            if (isHolidayOrWeekend(year, month, date)) {
                // 土曜日であればWEEKEND_SATURDAYを返す
                if (dayOfWeek === DayOfWeek.SATURDAY) {
                    return DiaType.WEEKEND_SATURDAY;
                }
                // 日曜日または祝日であればHOLIDAY_OR_SUNDAYを返す
                // isHolidayOrSundayがtrueの場合、それが日曜日か祝日であるため
                return DiaType.HOLIDAY_OR_SUNDAY;
            }
    
            // 3. 上記以外は平日
            return DiaType.WEEKDAY;
        };
    
        // グローバルスコープに公開
        window.dayJudge = dayJudge;
        window.isHolidayOrSunday = isHolidayOrSunday;
        window.isHolidayOrWeekend = isHolidayOrWeekend;
    })(); // End of the IIFE
    ```に関して、
    function isHolidayOrWeekend内に対し、
    
        return DiaType.WEEKDAY;
    };
    
    // グローバルスコープに公開
    window.dayJudge = dayJudge;
    window.isHolidayOrSunday = isHolidayOrSunday;
    window.isHolidayOrWeekend = isHolidayOrWeekend;
    

    })(); // End of the IIFE

        // ★★★ Console Log 挿入箇所 ★★★
        console.log(`【diaTypeJudge.js】 dayJudge() 実行: ${year}/${month}/${date}`);
        console.log(`【diaTypeJudge.js】 判定結果:`, result);
        // ★★★ Console Log 挿入箇所 ★★★
    
        return result;
    };
    
    // グローバルスコープに公開
    window.dayJudge = dayJudge;
    window.isHolidayOrSunday = isHolidayOrSunday;
    window.isHolidayOrWeekend = isHolidayOrWeekend;
    

    })();

    どうやら、10月16日でも1月16日でも同じconst diatype16を返すことが分かりました。
    そこで、いろいろ考えた挙句、結局
    function isHolidayOrWeekend内
    diatypejudge内の
    const monthPrefixes内の値を空にすると、平日ダイヤとなりました。
    つまり、function judgeDiaDay() {
    のcase内を10→1に変えると、10月16日は指定された値から外れるため、平日ダイヤという値が返されました。
    自分で編み出した結論は、
    function isHolidayOrWeekend内
    const monthPrefixesに対し、全ての月を入れていたことが誤作動の原因となっていました。
    但し、あくまでも自分勝手な空想論にすぎないので、
    貴殿のご意見を承りたく存じ上げます。
    
  23. おそらく、記述された markdown がずれているのだと思いますが、かなり読みにくいコメントです。読み解くのにお時間を頂きたく。

  24. つまり、ご自身で問題を解決された、ということですね。
    問題の認識もそれでいいかと思います。monthPrefixesに10月と11月だけを正しい形で残せばそれで動作するはずです。

  25. @sembokulove

    Questioner

    さようでございます。
    一応確認させていただきますが、
    問題の解決に至ったということで締め切らせていただいてよろしいでしょうか。
    以前、身勝手に締め切ってしまって、注意をお受けしたことがございますので。

  26. クローズしていただいて問題ございません。
    ご解決されて何よりです。

  27. @sembokulove

    Questioner

    遅ればせながら、ご返信ありがとうございます。
    では、クローズさせていただきますね。

Your answer might help someone💌