javascript - 如何在日历中为我的案例构建周数据?

标签 javascript angularjs calendar

我正在尝试使用 Angular 为我的应用程序构建日历模式。我有一个这样的模型

我构建年月没有问题,但不知道如何设置有其他日子的周。例如,10 月第一周的第一周有 28、29、30。

//code to build day
var month = 9; // hardcoded for demo.
var monthA = [];
for (var m = 0; m <= 3; m ++) {
    var weeks = [];
    totalDay = new Date(year, month + m + 1, 0).getDate()             
    //build days
    for (var i = 0; i <= totalDay; i++) {
         //setting up weeks
         if (i % 7 == 0) {
              weeks.push([]);
         }
         weeks[weeks.length-1].push(i);
     }

     var monthObj = {
         month : (month + m),
         weeks:weeks
     }

     monthA.push(monthObj);
}

上面的代码将产生

   monthA:
            [
                {
                    month: '10',
                    weeks: [
                            [1,2,3,4,5,6,7], 
                            [8,9,10,11,12,13,14],
                            [15,16,17,18,19,20,21],
                            [21,22,23,24,25,26,27],
                            [28,29,30,31]
                          ]
                },
                {
                    month: 'Nov',
                    weeks: [1,2,3,4,5,6,7] ...
                }...
            ]
        }

我希望得到

month:
        [
            {
                month: '10',
                weeks: [
                        [28, 29, 30, 1,2,3,4], //I haven o problem building the week from 1 to 4
                        [5,6,7,8,9,10,11],
                        [12,13,14,15,16,17,18],
                        [19,20,21,22,23,24,25],
                        [26,27,28,29,30,31,1]
                      ]
            },
            {
                month: '11',
                weeks: [26,27,28,29,30,31,1] ...
            }
        ]

非常感谢您的帮助!

最佳答案

我刚刚创建的这个函数应该可以满足你的需求:

function getWeeksinMonth(year, month){ //month 1-12 based
      var weeks = [];
        lastDayinMonth = new Date(year, month, 0)  // get last day in month
        firstDayinMonth = new Date(year, month-1, 1)  //get first day in month
        start =  new Date(firstDayinMonth.getTime()); //copy firstDay
        start.setDate(start.getDate() - start.getDay() ); // set date to previous sunday
        end=new Date(lastDayinMonth.getTime()); //copy lastDay
        end.setDate(end.getDate() - end.getDay() ); // set date to previous sunday
        if(end < lastDayinMonth){ // if previous sunday was not the lastDay itself, we want to add another week
            end.setDate(end.getDate() + 7);
        }    
        var counter=0;
        var week=[]
        for(;start<=end;start.setDate(start.getDate()+1)){ // traverse days
            if(counter % 7==0 && counter != 0){ // every 7 days add a week
                var copy=week.slice(0);
                weeks.push(copy)
                week=[];
            }
            week.push(start.getDate())
            counter++
        } 
        return weeks;
    }
    
    var weeks = getWeeksinMonth(2014,10);
    for(var i=0;i<weeks.length;i++){
        document.body.innerHTML+=weeks[i].toString() + '<br/>';
    }

关于javascript - 如何在日历中为我的案例构建周数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659958/

相关文章:

javascript - 在 Angular Testing/开发模块和生产模块之间切换

android - 如何在android中将时间转换为 "time ago "

javascript - 在 FullCalendar 上指定多日事件的开始和结束时间

javascript - 这个 JavaScript 有问题

javascript - 使用 jQuery 在对象中缓存选择器

javascript - 允许小数比的 ng-pattern

javascript - 防止从 url 导航到另一个页面

javascript - 安装 angularjs2 cli 时 npm 不工作 - “read ECONNRESET”

javascript - 非异步路径返回什么?

ios - 在日历 View 中禁用所有其他日期