簡體   English   中英

如果是星期日,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;
}

我的小提琴

該函數比需要的過於復雜:

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()執行了多少次...哎喲!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM