如何在JavaScript中查找指定日期的上/下一个周三(排除当天为周三)?
问题与修正方案
需求说明
给定YYYY-MM-DD格式的日期字符串,需实现两个功能:
- 输出上一个周三的日期(
YYYY-MM-DD格式),若给定日期为周三则排除当天; - 输出下一个周三的日期(
YYYY-MM-DD格式),若给定日期为周三则排除当天。
原代码问题
原代码中prevWed和nextWed函数仅通过固定加减7天计算日期,这种逻辑仅在给定日期恰好是周三时有效,若日期为其他星期几,结果会完全错误。比如示例中2022-10-05是周三,原nextWed本应返回2022-10-12,但错误逻辑导致结果完全偏离。
修正后的代码
const date_Event = '2022-10-05'; // 工具函数:将Date对象格式化为YYYY-MM-DD字符串 function formatDate(date) { return date.toISOString().split('T')[0]; } function prevWed() { const targetDate = new Date(date_Event); const dayOfWeek = targetDate.getDay(); // 0=周日,1=周一,...,3=周三 let daysToSubtract = (dayOfWeek + 7 - 3) % 7; // 如果当天是周三,需排除,额外减7天 if (dayOfWeek === 3) { daysToSubtract += 7; } targetDate.setDate(targetDate.getDate() - daysToSubtract); alert(formatDate(targetDate)); // 输出2022-09-28 } function nextWed() { const targetDate = new Date(date_Event); const dayOfWeek = targetDate.getDay(); let daysToAdd = (3 - dayOfWeek + 7) % 7; // 如果当天是周三,需排除,额外加7天 if (dayOfWeek === 3) { daysToAdd += 7; } targetDate.setDate(targetDate.getDate() + daysToAdd); alert(formatDate(targetDate)); // 输出2022-10-12 } prevWed(); nextWed();
代码说明
- 先将输入的日期字符串转换为
Date对象,通过getDay()获取该日期对应的星期(0代表周日,3代表周三); - 计算需要调整的天数:
- 上一个周三:根据当前星期,计算往前推多少天能到最近的周三,若当天就是周三,则额外多推7天排除当天;
- 下一个周三:同理,计算往后推多少天能到最近的周三,若当天是周三,则额外多推7天排除当天;
- 使用
setDate()调整日期后,通过工具函数格式化为YYYY-MM-DD字符串输出。
内容的提问来源于stack exchange,提问作者verlager
相关产品推荐
相关产品推荐

