You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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();

代码说明

  1. 先将输入的日期字符串转换为Date对象,通过getDay()获取该日期对应的星期(0代表周日,3代表周三);
  2. 计算需要调整的天数:
    • 上一个周三:根据当前星期,计算往前推多少天能到最近的周三,若当天就是周三,则额外多推7天排除当天;
    • 下一个周三:同理,计算往后推多少天能到最近的周三,若当天是周三,则额外多推7天排除当天;
  3. 使用setDate()调整日期后,通过工具函数格式化为YYYY-MM-DD字符串输出。

内容的提问来源于stack exchange,提问作者verlager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:20:32