网站营业时间展示问题:jQuery按星期、日期显示时周日日期错误
问题修复:商家营业时间周日日期显示错误
错误原因
你的日期计算逻辑在处理周日(对应代码中i=0的情况)时存在逻辑漏洞,现有条件分支未正确覆盖所有场景,导致周日的日期计算不符合预期。
修复后的代码
HTML(无需修改)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <table class="openingHrs "> <tr class="day day1 gpGrn bordercol"> <td class="day1Name nm" style="width:33.3%">Monday</td> <td class="day1Date dt" style="width:33.3%"></td> <td class="tm" style="width:33.3%">9:00am - 5:30pm</td> </tr> <tr class=" bordercol gpGrn day day2 "> <td class="day2Name nm">Tuesday</td> <td class="day2Date dt"></td> <td class="tm">9:00am - 5:30pm</td> </tr> <tr class="bordercol gpGrn day day3 "> <td class="day3Name nm">Wednesday</td> <td class="day3Date dt"></td> <td class="tm">9:00am - 5:30pm</td> </tr> <tr class="gpGrn day day4 bordercol"> <td class="day4Name nm">Thursday</td> <td class="day4Date dt"></td> <td class="tm">9:00am - 8:00pm</td> </tr> <tr class="gpGrn day day5 bordercol"> <td class="day5Name nm">Friday</td> <td class="day5Date dt"></td> <td class="tm">9:00am - 9:00pm</td> </tr> <tr class="gpGrn day day6 bordercol"> <td class="day6Name nm">Saturday</td> <td class="day6Date dt"></td> <td class="tm">9:00am - 5:00pm</td> </tr> <tr class="gpGrn day day0 "> <td class="day0Name nm">Sunday</td> <td class="day0Date dt"></td> <td class="tm">10:00am - 5:00pm</td> </tr> </table>
CSS(无需修改)
.day td { background-color: transparent !important; padding-left: 0px; padding-top: 10px; padding-bottom: 10px; } .day td { border: none; } .dt { text-align: center; } .tm { text-align: right; }
JavaScript(修复日期计算逻辑)
const monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; const today = new Date(); const todayDay = today.getDay(); // 0=周日,1=周一...6=周六 // 标记"Today" const currentDaySelector = `.day${todayDay}Name`; jQuery(currentDaySelector).html("Today"); jQuery(`.day${todayDay}`).removeClass("gpGrn"); // 标记"Tomorrow" let tomorrowDay; if (todayDay === 6) { tomorrowDay = 0; } else { tomorrowDay = todayDay + 1; } jQuery(`.day${tomorrowDay}Name`).html("Tomorrow"); // 计算当前星期的周一日期 const mondayOfWeek = new Date(today); // 如果今天是周日,减去6天得到周一;否则减去(今天是周几-1)天 mondayOfWeek.setDate(today.getDate() - (todayDay === 0 ? 6 : todayDay - 1)); // 设置周一到周六的日期 for (let i = 1; i <= 6; i++) { const targetDate = new Date(mondayOfWeek); targetDate.setDate(mondayOfWeek.getDate() + (i - 1)); const mth = monthNames[targetDate.getMonth()]; const dt = String(targetDate.getDate()).padStart(2, '0'); jQuery(`.day${i}Date`).html(`${dt} ${mth}`); } // 设置周日的日期(周一+6天) const sundayDate = new Date(mondayOfWeek); sundayDate.setDate(mondayOfWeek.getDate() + 6); const sundayMth = monthNames[sundayDate.getMonth()]; const sundayDt = String(sundayDate.getDate()).padStart(2, '0'); jQuery(".day0Date").html(`${sundayDt} ${sundayMth}`);
说明
修复后的代码先计算出当前星期的周一日期,再依次推导出周二到周日的日期,逻辑更清晰,能确保所有日期都是当前星期的正确日期,彻底解决周日日期显示错误的问题。
内容的提问来源于stack exchange,提问作者Jayson
相关产品推荐
相关产品推荐

