使用HTML和JavaScript实现门店营业状态按时间切换,现有代码运行异常求助
问题修正方案
原代码核心错误点
- 时间变量仅在页面加载时初始化一次,定时任务执行时不会更新最新时间,判断逻辑永远基于页面打开时的时间
getDay()返回值规则错误:JS中getDay()返回0对应周日,1-6分别对应周一到周六,周五对应返回值为5,原代码中判断currentDay === 7完全不符合API规则setInterval参数错误:传入openClose()会立即执行函数并将返回值(undefined)绑定给定时器,导致定时更新逻辑完全不生效,正确写法是传入函数引用openClose(无括号)- 显示状态逻辑不完整:仅设置了需要隐藏的元素,没有恢复需要展示的元素的显示状态,切换时间/日期时会出现两个元素都隐藏的异常
- 业务逻辑不符合需求:原代码存在多余的周日特殊逻辑、工作日判断范围错误,没有按要求实现周五显示
friday容器、其余工作日显示week容器的规则
修正后代码
JavaScript代码
function openClose() { // 每次执行都获取最新时间 const currentDate = new Date(); const currentDay = currentDate.getDay(); const currentHour = currentDate.getHours(); // 先获取所有DOM元素 const fridayEl = document.getElementById('friday'); const weekEl = document.getElementById('week'); const openEl = document.getElementById('open'); const closedEl = document.getElementById('closed'); // 1. 处理工作日/周五显示逻辑 if (currentDay === 5) { // 周五 fridayEl.style.display = 'block'; weekEl.style.display = 'none'; } else if (currentDay >=1 && currentDay <=4) { // 周一到周四 fridayEl.style.display = 'none'; weekEl.style.display = 'block'; } else { // 周六周日可按需求调整,这里默认隐藏两个时间提示容器 fridayEl.style.display = 'none'; weekEl.style.display = 'none'; } // 2. 处理营业/歇业显示逻辑 if (currentHour >=8 && currentHour < 18) { // 8点到18点前属于营业时间 openEl.style.display = 'block'; closedEl.style.display = 'none'; } else { openEl.style.display = 'none'; closedEl.style.display = 'block'; } } // 页面加载立即执行一次 openClose(); // 每5秒更新一次状态,传入函数引用而非执行结果 setInterval(openClose, 5000);
HTML代码(无需修改,可按需调整营业时间文本)
<div ALIGN="center"> <div style="color:red;font-size: 25px;" id="closed"> Closed</div> <div style="color:green;font-size: 25px;" id="open">Open.</div> </div> <time> We are open every day of the week - <div id="friday"> Friday - 8:00 AM to 6:00 PM</div> <div id="week">8:00 AM to 6:00 PM</div> </time>
补充说明
如果需要精确到分钟判断营业时间(比如周五要18:30才关门),可以在判断时加入getMinutes()的逻辑即可。
内容的提问来源于stack exchange,提问作者Mekkaoui_Redouane
相关产品推荐
相关产品推荐

