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

JavaScript实现排除周末的月度工作日对象数组生成及代码修复

解决当月工作日数组生成的周末跳过问题

看起来你遇到的问题是代码里跳过周末的逻辑没有生效,这是因为你在判断周末时错误地多次自增了index,导致星期几的对应关系完全混乱了。咱们一步步来修复这个问题:

原代码的问题分析

原代码里的这段判断逻辑是错误的根源:

if (daysInWeek[index++] == "Sunday" || daysInWeek[index++] == "Saturday") {
    continue; //I tried: no success.
}

这里存在两个关键问题:

  • 每次判断条件时,index会被自增两次(一次在判断周日的分支,一次在判断周六的分支),导致index的数值和当前日期的星期完全不匹配。
  • 手动维护index来追踪星期几的方式本身就容易出错,不如直接利用Date对象的内置方法来获取当天的星期,逻辑更可靠。

修正后的代码

我们可以直接通过Date对象的getDay()方法判断当天是否是周末(getDay()返回0表示周日,6表示周六),同时还做了一些额外优化,让代码更健壮:

function getDaysArray(year, month) {
    const numDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    // 处理闰年的2月天数
    if (month === 2 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0)) {
        numDaysInMonth[1] = 29;
    }
    const daysArray = [];
    
    for (let i = 1; i <= numDaysInMonth[month - 1]; i++) {
        const currentDate = new Date(year, month - 1, i);
        const dayOfWeek = currentDate.getDay();
        
        // 跳过周日(0)和周六(6)
        if (dayOfWeek === 0 || dayOfWeek === 6) {
            continue;
        }
        
        // 格式化日期为标准YYYY-MM-DD格式,避免单数字的月/日问题
        const formattedMonth = String(month).padStart(2, '0');
        const formattedDay = String(i).padStart(2, '0');
        
        daysArray.push({
            "title": "Turn",
            "resourceid": "4",
            "start": `${year}-${formattedMonth}-${formattedDay}T08:00:00`,
            "end": `${year}-${formattedMonth}-${formattedDay}T14:00:00`,
            "internals": ground[i - 1] // 注意数组索引修正:i从1开始,所以取i-1
        });
    }
    return daysArray;
}

// 示例调用
console.log(getDaysArray(2019, 12));

额外优化说明

  1. 闰年处理:原代码没有考虑闰年的2月,修正后添加了闰年判断,确保2月天数准确。
  2. 日期格式化:用padStart(2, '0')保证月、日都是两位数,符合ISO日期规范(比如2019-12-01而非2019-12-1)。
  3. 数组索引修正:原代码中ground[i]会导致索引越界,修正为ground[i-1](因为循环里i从1开始)。
  4. 语法规范:用const/let替代var,符合现代JavaScript语法,避免变量提升问题。

这样修改后,就能正确跳过周六和周日,只生成工作日的对象数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:53:14