如何在jQuery/JS中结合小时与分钟判断店铺营业状态?
解决jQuery实时判断店铺营业状态(含分钟精确判断)
嘿,我懂你的困扰——直接把小时和分钟拼成小数的方式根本行不通!比如你写的11.30,JS会把它当成11.3小时,也就是11小时18分钟(0.3×60),完全不是你要的11点30分,这就是代码无效的核心原因。
下面给你两种靠谱的实现思路,结合你的需求来调整:
方案1:转换为总分钟数比较(最直观不易错)
把所有时间都转换成“当天的总分钟数”,这样直接用数字比较就非常准确了。比如7:30就是7×60+30=450分钟,18:00就是18×60=1080分钟。
结合你的代码片段,完整实现如下:
$(function() { // 定义检查营业状态的函数 function updateBusinessStatus() { var now = new Date(); var currentHours = now.getHours(); var currentMinutes = now.getMinutes(); // 计算当前时间的总分钟数 var currentTotal = currentHours * 60 + currentMinutes; // 设定营业时间的总分钟数:7:30 到 18:00 var openTotal = 7 * 60 + 30; var closeTotal = 18 * 60; // 判断状态并切换div显示 if (currentTotal >= openTotal && currentTotal < closeTotal) { $('.shop-open').show(); $('.shop-closed').hide(); } else { $('.shop-closed').show(); $('.shop-open').hide(); } } // 页面加载时立即执行一次 updateBusinessStatus(); // 每分钟更新一次,保证实时性 setInterval(updateBusinessStatus, 60000); });
方案2:直接判断小时+分钟的组合条件
如果你不想转换总分钟数,也可以通过多条件组合来精确判断:
$(function() { function updateBusinessStatus() { var now = new Date(); var currentHours = now.getHours(); var currentMinutes = now.getMinutes(); // 营业条件: // 要么小时在8-17之间(完全处于营业时间), // 要么小时是7且分钟≥30(刚到营业时间), // 注意:如果18:00算打烊,就不要包含18点的情况 var isOpen = (currentHours > 7 && currentHours < 18) || (currentHours === 7 && currentMinutes >= 30); if (isOpen) { $('.shop-open').show(); $('.shop-closed').hide(); } else { $('.shop-closed').show(); $('.shop-open').hide(); } } updateBusinessStatus(); setInterval(updateBusinessStatus, 60000); });
为什么你的原写法失效?
你之前尝试的hour + minutes <= 11.30逻辑完全错误:
- 这里的
minutes是0-59的数字,比如30,所以hour + minutes会变成11+30=41,和11.30比较的话,41远大于11.30,逻辑完全不符合预期。 - 正确的时间比较必须把小时和分钟统一成相同的单位(要么总分钟,要么分别判断小时和分钟的组合)。
内容的提问来源于stack exchange,提问作者Tobias Heide
相关产品推荐
相关产品推荐

