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

JavaScript日期调度实现:如何生成指定频次的问诊日期?

解决方法:用JavaScript生成指定次数的周三/周五问诊日期

嘿,这个需求我之前帮朋友处理过,核心就是一步步筛选出符合要求的日期,我给你拆解下思路,再附上可直接复用的代码:

核心思路

  1. 先明确JavaScript的星期取值规则:Date.getDay() 返回0(周日)到6(周六),所以我们要找的周三对应3,周五对应5。
  2. 优先判断起始日期(默认是今天)是否本身就是周三/周五——如果是,这一天直接算第一次问诊,加入结果列表。
  3. 从起始日期开始,每天往后推一天,每次检查当前日期是否是目标星期,符合条件就加入列表,直到凑够X次问诊的日期。

完整代码实现

function getVisitDates(totalVisits, startDate = new Date()) {
  // 定义目标星期:周三(3)、周五(5)
  const targetWeekdays = [3, 5];
  const visitDates = [];
  // 创建起始日期的副本,避免修改原日期对象
  let currentDate = new Date(startDate);

  // 先检查起始日期是否符合要求,符合就加入列表
  if (targetWeekdays.includes(currentDate.getDay())) {
    visitDates.push(new Date(currentDate));
    totalVisits--;
  }

  // 循环找剩余的问诊日期
  while (totalVisits > 0) {
    // 往后推一天
    currentDate.setDate(currentDate.getDate() + 1);
    // 如果当前日期是目标星期,加入列表
    if (targetWeekdays.includes(currentDate.getDay())) {
      visitDates.push(new Date(currentDate));
      totalVisits--;
    }
  }

  // 格式化日期为YYYY-MM-DD格式,可按需调整
  return visitDates.map(date => {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
  });
}

// 示例用法:生成5次问诊的日期(从今日开始)
const visits = getVisitDates(5);
console.log(visits);

关键细节说明

  • 日期对象的副本处理:每次往列表里加日期时用new Date(currentDate),因为JavaScript的Date是引用类型,直接push会导致后续修改影响列表里的日期。
  • 灵活的起始日期:函数支持传入自定义起始日期,比如指定某一天作为“今日”,只需调用getVisitDates(3, new Date('2024-05-20'))即可。
  • 可定制的日期格式:最后用map转成了YYYY-MM-DD字符串,你可以根据需求改成带时间的格式,或者其他地区习惯的格式。

测试场景示例

  • 如果今日是周四(2024-05-23),调用getVisitDates(3)会返回:["2024-05-24", "2024-05-29", "2024-05-31"](周五、下周三、下周五)
  • 如果今日是周三(2024-05-22),调用getVisitDates(3)会返回:["2024-05-22", "2024-05-24", "2024-05-29"](今日、周五、下周三)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:42:08