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

24小时制下JS between函数始终执行else分支,请求代码排查

问题排查与解决

嘿,我一眼就发现了问题所在——你的条件判断结构写错了!

问题根源

你写的三个if是完全独立的语句,最后那个else只和**最后一个if (time.between(15, 18))**绑定,而不是作为前面所有if的兜底分支。

当当前时间是8点时:

  • 第一个if (time.between(7, 9))会成立,执行对应的console.log
  • 第二个if (time.between(9, 15))不成立,直接跳过
  • 第三个if (time.between(15, 18))也不成立,所以触发它绑定的else分支

这就是为什么你明明看到8点符合第一个区间,却依然会执行else的原因。另外,你的between函数逻辑是没问题的,8.between(7,9)确实会返回true,你可以观察第一个console.log的输出验证这一点。

修正后的代码

把后面的if改成else if,让整个条件判断形成互斥的逻辑链,这样只要前面的条件满足,后面的分支就不会执行,else也只会在所有区间都不匹配时触发:

// 获取时间
var today = new Date();
var time = today.getHours();
console.log(time); // 测试时当前为8点

// Between函数
Number.prototype.between = function(first, last) {
  return first < last ? this >= first && this <= last : this >= last && this <= first;
};

// 执行逻辑(修正后)
if (time.between(7, 9)) {
  console.log("between(7, 9)",time.between(7, 9))
} else if (time.between(9, 15)) {
  console.log("between(9, 15)",time.between(9, 15))
} else if (time.between(15, 18)) {
  console.log("between(15, 18)",time.between(15, 18))
} else { 
  console.log("else")
}

额外验证

你可以先确认console.log(time)确实输出8,确保getHours()获取的24小时制时间是正确的(8点就是8,这部分逻辑没问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:03:11