为营业时间脚本添加日期例外规则的技术求助
问题排查与修复:营业时间例外日期逻辑失效
问题根源
你当前的代码错误地用getDay()比较星期几,而非具体的日期。比如2022-10-17是周一,那所有周一都会触发例外逻辑,而不是只有10月17号当天。这就是例外日期逻辑不生效的核心原因。
修复方案
需要直接比较具体日期,同时处理Date对象的时区/时间部分干扰,确保只对比年月日:
修改后的代码
// 获取当前日期并格式化为YYYY-MM-DD字符串(去除时分秒) const formatDate = (date) => { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; }; const today = new Date(); const todayStr = formatDate(today); // 每周营业时间(getDay()返回0=周日,1=周一,数组索引直接对应) const hours = [ 'Sunday hours', 'Monday hours', 'Tuesday hours', 'Wednesday hours', 'Thursday hours', 'Friday hours', 'Saturday hours' ]; const exceptionText = 'Special day'; // 例外日期数组(直接存YYYY-MM-DD格式字符串,直观且避免时区问题) const exceptionDates = [ '2022-10-17', '2022-12-26', '2023-01-02' ]; // 判断逻辑 const openingHoursEl = document.getElementById("openinghours"); if (exceptionDates.includes(todayStr)) { openingHoursEl.innerHTML = exceptionText; } else { openingHoursEl.innerHTML = hours[today.getDay()]; }
<div id="openinghours"></div>
关键说明
formatDate函数:将Date对象转为YYYY-MM-DD格式字符串,避免时区或时分秒导致的日期匹配错误。- 例外日期用字符串存储:相比创建Date对象更简单直观,彻底规避时区差异问题。
- 营业时间数组调整:原代码中
n-1在周日(getDay()返回0)时会取到数组最后一项,现在调整数组顺序,让getDay()的返回值直接对应数组索引,逻辑更清晰。
内容的提问来源于stack exchange,提问作者galimathies
相关产品推荐
相关产品推荐

