基于时间与日期显示营业状态的JS代码修复求助
问题分析与修复方案
代码存在的核心问题
- 数组语法错误:
weekdays数组中["Sunday"]与后续元素间缺少逗号,导致数组初始化失败,无法正确读取营业时间数据。 - 时间表示错误:用
8.30表示8点30分是错误的——JavaScript中8.30等价于8.3,实际对应8点18分(0.3×60=18),完全偏离预期营业时间。 - 字符串与数字比较逻辑错误:
now通过字符串拼接生成(如"8.30"),直接与数字类型的营业时间比较会触发非预期的字符串比较规则,导致判断失效。 - 索引与判断逻辑错误:原代码错误使用
day[2]、day[3]等索引,实际周一至周五的营业时间存储在day[1](开门时间)和day[2](关门时间);同时判断条件逻辑完全颠倒,本该判断当前时间在开门与关门之间,却写成了超出范围的判断。 - 休息日处理缺失:周六、周日的数组仅含日期名称,访问
day[1]、day[2]会得到undefined,导致判断逻辑直接进入关闭分支。
修复后的完整代码
JavaScript
var a = document.getElementById("hoursofoperation"); var d = new Date(); var n = d.getDay(); // 0=周日, 1=周一...6=周六 // 将时间转换为分钟数,彻底避免小数精度问题 var nowMinutes = d.getHours() * 60 + d.getMinutes(); var weekdays = [ ["Sunday"], // 周日休息 ["Monday", 8*60+30, 21*60+30], // 8:30 - 21:30 ["Tuesday", 6*60, 11*60+30], // 6:00 - 11:30 ["Wednesday", 8*60+30, 12*60], // 8:30 - 12:00 ["Thursday", 8*60+30, 12*60], // 8:30 - 12:00 ["Friday", 8*60+30, 12*60+30], // 8:30 - 12:30 ["Saturday"] // 周六休息 ]; var day = weekdays[n]; // 优先判断是否为休息日 if (day.length === 1) { a.innerHTML = "We are Closed."; } else { var openMinutes = day[1]; var closeMinutes = day[2]; // 判断当前时间是否在营业时间内 if (nowMinutes >= openMinutes && nowMinutes <= closeMinutes) { a.innerHTML = "We are Open now."; } else { a.innerHTML = "We are Closed."; } }
HTML
<span id="hoursofoperation"></span>
修复关键点说明
- 时间转分钟数:把所有时间转换为分钟数(如8点30分=510分钟),彻底规避小数精度问题,比较逻辑更准确可靠。
- 修正数组语法:补全数组元素间的逗号,确保
weekdays数组能正确初始化。 - 明确休息日判断:通过数组长度直接识别休息日,无需额外复杂判断,逻辑更清晰。
- 修正判断逻辑:正确使用营业时间的索引,并将判断条件调整为“当前时间在开门与关门时间之间”,符合业务需求。
- 优化提示文本:移除原代码中冗余的重复内容和无意义字符,使提示更规范。
内容的提问来源于stack exchange,提问作者userZolika
相关产品推荐
相关产品推荐

