JavaScript 如果是星期日,日历不显示月初

JavaScript calendar dont show the first of month if is sunday

我正在使用以下 Javascript 日历。问题是,如果该月的第一天是星期日,它就不会出现。见八月。

脚本已被朋友改编,允许每周从星期一开始。感谢您的帮助,非常感谢!

function getDays(passedInDate, date, i, local) {
var month = {
    name: date.toLocaleString(local, { month: 'long'}),
    year: date.getFullYear(),
    weeks: []
};
var newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth();
var counter = 0;
while (date.getMonth() === newDate) {
    var week = getNumberOfWeeks(newDateInstance(date));
    //if(week == 5)
    //    break;
    if (typeof month.weeks[week] === 'undefined') {
        month.weeks[week] = {};
    }

    var day = newDateInstance(date);

    day.setTime(day.getTime() + (24 * 3600 * 1000));
    //console.log(day);

    if(week == 0 && counter == 0 && day.getDay() >= 2){
        
        var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
    
        month.weeks[week][tempDay.getDay()-1] = {
            date: tempDay
        };
    }
    else if(week == 0 && counter == 0 && day.getDay() == 0){
        console.log(day.getDay());
        var tempDay = new Date(day.getTime() - (24 * 3600 * 1000));
        
        month.weeks[week][5] = {
            date: tempDay
        };
    }
    
    if(week == 4 && day.getDate() == 1 || week == 5 && day.getDate() == 1){
        break;
    }    
    if(day.getDay() == 0){
        month.weeks[week][6] = {
            date: day
        };
    }else{
        month.weeks[week][day.getDay()-1] = {
            date: day
        };    
    }
    
    
    date.setDate(date.getDate() +1);

    counter++;
}
return month;
}

My fiddle

该函数比需要的复杂得多:

function getNumberOfWeeks(date) {
    let w = date.getDay() - 1;
    if (w < 0)
        w = 6;

    return Math.ceil((date.getDate() - 1 - w) / 7);
}

function getDays(passedInDate, date, i, local) {
    const newDate = new Date(passedInDate.getFullYear(), passedInDate.getMonth() + i, 1).getMonth(),
          month = {
              name: date.toLocaleString(local, { month: 'long'}),
              year: date.getFullYear(),
              weeks: []
          };

    while (date.getMonth() === newDate) {

        const _date = newDateInstance(date),
              week = getNumberOfWeeks(_date),
              day = _date.getDay();

        if (month.weeks[week] === undefined) {
            month.weeks[week] = {};
        }
        month.weeks[week][day ? day - 1 : 6] = {
          date: _date
        };    

        date.setDate(date.getDate() +1);
    }
    return month;
}

此外,month.weeks[week][day] 包含不必要的 {date: Date} 对象,它可以简单地包含 Date 本身(有 2 个需要通过删除 .date)

旁注: 请避免对相同函数进行不必要的调用,调用一次并将结果存储在变量中,而不是使用变量。数一数 day.getDay() 被执行了多少次...哎哟!