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

如何简化JavaScript IF/ELSE营业时间判断函数并修复12PM判断错误

问题原因分析

你之前的简化版代码逻辑出错核心是两点:

  1. 分支判断顺序错误:time >=6 && period === 'PM'的判断优先级高于time === 12 && period === 'PM',12PM的参数会先命中前一个判断直接返回结果,后面的分支永远不会生效
  2. 没有处理12这个特殊值的逻辑:12小时制里12AM/12PM和常规1-11点的上下午逻辑不一致,单独拆分判断很容易遗漏

最优解决方案

最不容易出错的写法是先把输入的12小时制时间转为24小时制,再统一做区间判断,逻辑清晰无冗余:

function shopHours(time, period) {
  // 转24小时制
  let hour24
  if (period === 'AM') {
    hour24 = time === 12 ? 0 : time
  } else {
    hour24 = time === 12 ? 12 : time + 12
  }
  // 6AM(6点)到6PM(18点)营业,包含6AM,不包含6PM
  return hour24 >= 6 && hour24 < 18 ? 'Open' : 'Closed'
}

测试验证

所有边界情况都能正确覆盖:

  • 6 AM → 返回Open
  • 5:59 AM → 返回Closed
  • 12 PM(正午)→ 返回Open
  • 5 PM → 返回Open
  • 6 PM → 返回Closed
  • 12 AM(凌晨零点)→ 返回Closed

如果你的业务规则里正午12PM确实需要返回Closed,只需要把24小时制的判断条件修改为hour24 >=6 && hour24 <12即可。

如果你一定要保留多分支if/else的写法来练习语法,可以调整分支顺序,优先处理12点的特殊情况,再处理通用判断:

function shopHours(time,period) {
  // 优先处理12点的特殊情况
  if (time === 12) {
    return period === 'AM' ? 'Closed' : 'Open'
  }
  // 再处理通用情况
  if (period === 'AM') {
    return time >=6 ? 'Open' : 'Closed'
  } else {
    return time <6 ? 'Open' : 'Closed'
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:03