diff --git a/mapgood.js b/mapgood.js index 970b08d..f2380b2 100644 --- a/mapgood.js +++ b/mapgood.js @@ -23,85 +23,6 @@ }).addTo(map).bindPopup('現在地'); }); } - - // 曜日を日本語に変換する配列 - const dayMap = ['日', '月', '火', '水', '木', '金', '土']; - const today = new Date(); - const todayStr = dayMap[today.getDay()];// 今日の曜日を文字列で取得 - - // ───── 関数:本日が定休日かどうかを判定 ───── - function isClosedToday(desc1) { - if (!desc1) return false; - const closed = desc1.replace('定休日:', '').replace(/:/g, '').split(/[、,/・\/\s]/).filter(Boolean);// 曜日や不定休を抽出 - - for (let entry of closed) { - entry = entry.trim(); - if (entry.includes('不定休')) return true; - if (entry.includes(todayStr) && !entry.match(/第\d/)) return true; - - // 第○○曜日のパターン - const nthMatch = entry.match(/第(\d)(.)曜日/); - if (nthMatch) { - const nth = parseInt(nthMatch[1], 10); - const day = nthMatch[2]; - if (day !== todayStr) continue; - - // 今月のその曜日が第何回か判定 - let count = 0; - for (let d = 1; d <= 31; d++) { - const date = new Date(today.getFullYear(), today.getMonth(), d); - if (date.getMonth() !== today.getMonth()) break; - if (date.getDay() === dayMap.indexOf(day)) count++; - if (date.getDate() === today.getDate() && count === nth) return true; - } - } - } - return false; - } - - // ───── 関数:現在時間が営業時間内か判定 ───── - function isOpenNow(desc2) { - if (!desc2) return false; - const now = new Date(); - const day = now.getDay(); - const time = now.getHours() * 60 + now.getMinutes();// 現在時刻(分単位) - - // 複数の営業時間パターン(曜日ごと)を考慮 - const segments = desc2.split(/\/|\\n|\\r\\n/); - for (let segment of segments) { - // 曜日を含む営業時間フォーマットにマッチ - const match = segment.match(/(月|火|水|木|金|土|日)(?:~(月|火|水|木|金|土|日))?[::]?\s*(\d{1,2})[::](\d{2})\s*〜\s*(\d{1,2})[::](\d{2})/); - if (match) { - const [_, startDay, endDay, sh, sm, eh, em] = match; - const startMin = parseInt(sh) * 60 + parseInt(sm); - let endMin = parseInt(eh) * 60 + parseInt(em); - const dayIndex = { '日': 0, '月': 1, '火': 2, '水': 3, '木': 4, '金': 5, '土': 6 }; - let validDay = false; - if (!endDay) { - validDay = day === dayIndex[startDay]; - } else { - const startIdx = dayIndex[startDay]; - const endIdx = dayIndex[endDay]; - validDay = startIdx <= endIdx ? day >= startIdx && day <= endIdx : day >= startIdx || day <= endIdx; - } - if (!validDay) continue; - if (endMin <= startMin) endMin += 1440;// 翌日まで営業する場合 - const currentTime = time < startMin ? time + 1440 : time; - if (currentTime >= startMin && currentTime <= endMin) return true; - } - - // シンプルな時間フォーマット(曜日なし) - const simple = segment.match(/(\d{1,2})[::](\d{2})\s*〜\s*(\d{1,2})[::](\d{2})/); - if (simple) { - const startMin = parseInt(simple[1]) * 60 + parseInt(simple[2]); - let endMin = parseInt(simple[3]) * 60 + parseInt(simple[4]); - if (endMin <= startMin) endMin += 1440; - const currentTime = time < startMin ? time + 1440 : time; - if (currentTime >= startMin && currentTime <= endMin) return true; - } - } - return false; - } // ───── CSVファイルから店舗情報を読み込んでマーカーを配置 ───── fetch('snack.csv')