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

PHP+MySQL实现酒吧电子菜单跨天欢乐时段产品展示方案

解决酒吧跨天时段菜单展示的判断逻辑

这个问题在做餐饮类时段性功能时特别常见,我来给你梳理清晰的解决方案:

核心逻辑拆分

我们可以把时段分成两种情况处理:

  • 非跨天时段(开始时间 ≤ 结束时间):比如12:00-20:00,用你原本的判断逻辑就完全没问题:
    startTime ≤ currentTime AND endTime ≥ currentTime
  • 跨天时段(开始时间 > 结束时间):比如20:00-次日03:00,这时候当前时间只要满足「在开始时间到当天结束」或者「在当天开始到结束时间」,就算在时段内,对应的逻辑是:
    currentTime ≥ startTime OR currentTime ≤ endTime

通用合并公式

把两种情况整合起来,就能得到一个适用于所有时段的判断公式:

(startTime <= endTime AND currentTime >= startTime AND currentTime <= endTime) 
OR 
(startTime > endTime AND (currentTime >= startTime OR currentTime <= endTime))

代码示例(以JavaScript为例)

如果你的菜单是前端实现,我们可以把时间转换为「当日总秒数」(比如12:00:00就是123600=43200秒,03:00:00就是33600=10800秒),这样计算更精准:

// 把时间字符串(如"12:00:00")转成当日总秒数
function timeToSeconds(timeStr) {
  const [hours, minutes, seconds] = timeStr.split(':').map(Number);
  return hours * 3600 + minutes * 60 + seconds;
}

// 判断当前时间是否在目标时段内
function isProductAvailable(currentTimeStr, startTimeStr, endTimeStr) {
  const currentSec = timeToSeconds(currentTimeStr);
  const startSec = timeToSeconds(startTimeStr);
  const endSec = timeToSeconds(endTimeStr);

  if (startSec <= endSec) {
    return currentSec >= startSec && currentSec <= endSec;
  } else {
    // 跨天场景
    return currentSec >= startSec || currentSec <= endSec;
  }
}

// 测试用例
console.log(isProductAvailable("15:00:00", "12:00:00", "20:00:00")); // true(非跨天)
console.log(isProductAvailable("22:30:00", "20:00:00", "03:00:00")); // true(跨天,22:30在20:00-24:00之间)
console.log(isProductAvailable("02:15:00", "20:00:00", "03:00:00")); // true(跨天,02:15在00:00-03:00之间)
console.log(isProductAvailable("10:00:00", "20:00:00", "03:00:00")); // false(不在时段内)

额外提示

如果是后端处理(比如Python、Java),逻辑完全一致,只是时间转换的语法不同而已——核心都是先把时间统一转换成可比较的数值(秒数、时间戳等),再套用上述的判断逻辑。

内容的提问来源于stack exchange,提问作者studio-klik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:08