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

固定星期位7天日历JavaScript代码失效排查求助

问题排查与修复方案

核心问题分析

  1. 循环次数错误:原代码中for (var i = 0; i < 5; i++)仅生成5天,不符合显示7天的需求。
  2. 星期索引不匹配:Date.getDay()返回值为0(周日)~6(周六),但你的星期数组daysOfWeek索引0对应周一(Ma),直接用(currentDay + i) % 7会导致星期名称错位。
  3. 日期计算逻辑缺陷:直接用today.getDate() + i会出现跨月日期错误(比如月末30号+2变成32号)。
  4. 无输出排查:若console.log无输出,优先检查代码是否被加载执行——比如JS是否放在HTML底部,或window.onload是否被其他脚本覆盖。

修复后的完整代码

HTML(无需修改)

<div class="calendar">
   <p class="month" id="month"></p>
     <div class="d-flex justify-content-around" id="daysContainer">
                        
     </div>
</div>

JavaScript

function generateWeekDays() {
    console.log("代码开始执行"); // 用于验证函数是否触发
    var daysOfWeek    = ['Ma', 'Di', 'Woe', 'Do', 'Vrij', 'Za', 'Zo']; 
    var today         = new Date();
    var daysContainer = document.getElementById('daysContainer');
    
    daysContainer.innerHTML = '';
    
    // 生成完整7天,修正循环条件
    for (var i = 0; i < 7; i++) {
        // 修正星期索引:将getDay()的0(周日)转为数组最后一位索引6,1(周一)转为0,匹配数组顺序
        var adjustedDayIndex = today.getDay() === 0 ? 6 : today.getDay() - 1;
        var dayIndex = (adjustedDayIndex + i) % 7;
        var dayName = daysOfWeek[dayIndex];
        
        // 正确计算日期:基于today创建新对象,避免修改原日期导致的跨月错误
        var targetDate = new Date(today);
        targetDate.setDate(today.getDate() + i);
        var dayNumber = targetDate.getDate();
        
        var dayElement = document.createElement('div'); 
        var classes = 'flex-direction-row ' + dayName.toLowerCase(); 
        if (i === 0) classes += ' active'; 
        dayElement.className = classes;

        dayElement.innerHTML = '<div class="number">' + dayNumber + '</div>' 
                             + '<div class="day">' + dayName + '</div>';

        daysContainer.appendChild(dayElement);
    }

    var monthElement         = document.getElementById('month');
    var monthNames           = ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'];
    var currentMonth         = today.getMonth();
    monthElement.textContent = monthNames[currentMonth];
}

window.onload = generateWeekDays;

关键修复点说明

  • 循环次数:将i < 5改为i < 7,确保生成完整7天日历。
  • 星期索引修正:通过adjustedDayIndex转换getDay()的返回值,让星期名称与固定位置完全匹配。
  • 日期计算:使用独立的targetDate对象计算日期,避免跨月时出现无效数字。
  • 调试验证:加入console.log确认函数是否被触发,若仍无输出,检查JS文件是否正确引入,或是否有其他脚本覆盖window.onload。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:12:37