You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间与日期显示营业状态的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>

修复关键点说明

  1. 时间转分钟数:把所有时间转换为分钟数(如8点30分=510分钟),彻底规避小数精度问题,比较逻辑更准确可靠。
  2. 修正数组语法:补全数组元素间的逗号,确保weekdays数组能正确初始化。
  3. 明确休息日判断:通过数组长度直接识别休息日,无需额外复杂判断,逻辑更清晰。
  4. 修正判断逻辑:正确使用营业时间的索引,并将判断条件调整为“当前时间在开门与关门时间之间”,符合业务需求。
  5. 优化提示文本:移除原代码中冗余的重复内容和无意义字符,使提示更规范。

内容的提问来源于stack exchange,提问作者userZolika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:10:31