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

如何实现支持任意起止值的星期数字区间提取算法?

解决星期数字区间提取问题

这个问题其实很好处理,核心就是区分不跨周末和跨周末两种情况,直接分逻辑实现就好,我给你写几个常用语言的实现,逻辑清晰还容易维护:

Python 实现

def get_weekday_range(from_day, to_day):
    # 先做参数合法性校验,避免非法输入
    if not (0 <= from_day <= 6 and 0 <= to_day <= 6):
        raise ValueError("from_day 和 to_day 必须是 0-6 之间的整数")
    
    if from_day <= to_day:
        # 不跨周末:直接生成从 from_day 到 to_day 的连续列表
        return list(range(from_day, to_day + 1))
    else:
        # 跨周末:先取 from_day 到周六(6),再取周日(0)到 to_day,合并两个列表
        return list(range(from_day, 7)) + list(range(0, to_day + 1))

测试示例

  • get_weekday_range(1, 4) → 返回 [1, 2, 3, 4](周一到周四)
  • get_weekday_range(5, 2) → 返回 [5, 6, 0, 1, 2](周五到周二)
  • get_weekday_range(6, 0) → 返回 [6, 0](周六到周日)
  • get_weekday_range(3, 3) → 返回 [3](仅周三)

JavaScript 实现

如果是前端场景,也可以用类似逻辑:

function getWeekdayRange(fromDay, toDay) {
    if (fromDay < 0 || fromDay > 6 || toDay < 0 || toDay > 6) {
        throw new Error("fromDay 和 toDay 必须是 0-6 之间的整数");
    }
    
    const result = [];
    if (fromDay <= toDay) {
        for (let i = fromDay; i <= toDay; i++) {
            result.push(i);
        }
    } else {
        // 先添加 fromDay 到周六的数字
        for (let i = fromDay; i <= 6; i++) {
            result.push(i);
        }
        // 再添加周日到 toDay 的数字
        for (let i = 0; i <= toDay; i++) {
            result.push(i);
        }
    }
    return result;
}

核心逻辑说明

不管用哪种语言,核心思路都是:

  • 当起始值小于等于结束值时,直接提取连续区间
  • 当起始值大于结束值时,把区间拆成「起始值到周六」和「周日到结束值」两部分,再合并

这种实现方式可读性强,也方便后续扩展(比如要把数字映射成星期名称,直接在生成列表时做转换即可)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:07:41