如何根据当前日期在HTML网站显示下一场讲座的日期?
修复根据日期显示下一场讲座的代码问题
原代码的核心问题
- switch语句用法错误:switch的
case需要匹配具体数值,不能写条件表达式(比如case weekNumber <=42),这种写法会把条件结果(true/false)和weekNumber(数字)对比,永远无法匹配正确分支。 - 逻辑运算符错误:判断逻辑与应该用
&&,原代码里的&是按位与运算符,逻辑完全不对。 - 周数计算逻辑不可靠:原
getDateWeek函数的周数规则和实际需求不匹配,跨年场景下容易出错,导致后续判断失效。
更可靠的解决方案:直接对比日期
跳过周数计算,直接用讲座的具体日期和当前日期对比,逻辑更直观,新手也容易理解,还能避免周数定义差异带来的问题:
<p id="demo"></p> <script> // 按时间顺序定义所有讲座日期(注意:月份是0开始,10月对应9,1月对应0) const lectureDates = [ { date: new Date(2024, 9, 14), displayText: "2024年10月14日" }, { date: new Date(2024, 9, 21), displayText: "2024年10月21日" }, { date: new Date(2025, 0, 14), displayText: "2025年1月14日" } ]; const currentDate = new Date(); let nextSession = "暂无后续讲座"; // 遍历找到第一个未到来的讲座 for (let lecture of lectureDates) { if (lecture.date > currentDate) { nextSession = lecture.displayText; break; } } // 处理所有讲座已结束的情况 if (nextSession === "暂无后续讲座" && lectureDates.length > 0) { nextSession = `${lectureDates[lectureDates.length - 1].displayText}(已结束)`; } document.getElementById("demo").innerHTML = "下一场讲座:" + nextSession; </script>
方案优势
- 无需复杂的周数计算,逻辑清晰易懂
- 后续添加新讲座只需在
lectureDates数组里追加即可 - 自动处理所有讲座已结束的边界情况
若坚持用周数方案(仅作参考)
如果一定要基于周数判断,需先修正周数计算和分支判断:
<p id="demo"></p> <script> // 修正为ISO标准周数计算(周一为一周开始,第1周包含1月4日) function getDateWeek(date = new Date()) { const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); const dayNum = d.getUTCDay() || 7; // 周日转为7 d.setUTCDate(d.getUTCDate() + 4 - dayNum); const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1)); return Math.ceil((((d - yearStart) / 86400000) + 1) / 7); } const currentDate = new Date(); const weekNumber = getDateWeek(currentDate); let nextSession; // 用if-else替代错误的switch写法 if (weekNumber <= 42) { nextSession = "2024年10月14日"; } else if (weekNumber > 42 && weekNumber <= 43) { nextSession = "2024年10月21日"; } else { nextSession = "2025年1月14日"; } document.getElementById("demo").innerHTML = "下一场讲座:" + nextSession; </script>
内容的提问来源于stack exchange,提问作者Rhjg
相关产品推荐
相关产品推荐

