fullCalendar jQuery,每个星期一重复?

Kar*_*rem 12 jquery fullcalendar

通常这是日历中的事件:

            {

                title: 'Test',

                start: '2012-06-08',

                end: '2012-06-08',

                url: 'test/test'

            },
Run Code Online (Sandbox Code Playgroud)

工作良好.虽然如何在日历中的每个星期一制作1个活动?或者每个星期二等等取决于您输入的工作日/数字?如果有一个参数是什么?

如果它不存在,我可以以某种方式修改并添加功能来实现这一目标吗?所以你可以输入一个像repeatEveryWeekDay:2(这是星期一)的参数,然后在所有未来的星期一,数据将显示在那里.

我试着查看http://arshaw.com/fullcalendar/docs/event_data/Event_Object/,但找不到任何东西.

Chr*_*rez 35

fullCalendar 允许传递一个函数,例如,从服务器下载事件,或动态生成这些事件,而不是传递事件数组.

文档中的大多数示例都使用HTTP请求来获取事件数据.但回调函数仍然足够灵活,可以按照您的方式工作.

看看我刚刚为您编写的以下示例:

$(document).ready(function() {

    var date = new Date();
    var d = date.getDate();
    var m = date.getMonth();
    var y = date.getFullYear();

    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        editable: true,
        events: [
            // some original fullCalendar examples
            {
                title: 'All Day Event',
                start: new Date(y, m, 1)
            },
            {
                title: 'Long Event',
                start: new Date(y, m, d-5),
                end: new Date(y, m, d-2)
            },
            {
                id: 999,
                title: 'Repeating Event',
                start: new Date(y, m, d-3, 16, 0),
                allDay: false
            }
        ]
    });

    // adding a every monday and wednesday events:
    $('#calendar').fullCalendar( 'addEventSource',        
        function(start, end, callback) {
            // When requested, dynamically generate virtual
            // events for every monday and wednesday.
            var events = [];

            for (loop = start.getTime();
                 loop <= end.getTime();
                 loop = loop + (24 * 60 * 60 * 1000)) {

                var test_date = new Date(loop);

                if (test_date.is().monday()) {
                    // we're in Moday, create the event
                    events.push({
                        title: 'I hate mondays - Garfield',
                        start: test_date
                    });
                }

                if (test_date.is().wednesday()) {
                    // we're in Wednesday, create the Wednesday event
                    events.push({
                        title: 'It\'s the middle of the week!',
                        start: test_date
                    });
                }
            } // for loop

            // return events generated
            callback( events );
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

上述功能会自动为两个日期之间的每个星期一和星期三生成一个事件.日期用start和表示end.那些参数通过了fullCallendar.上述函数生成的事件fullCallendar通过callback第三个参数中的函数返回.

我使用DateJS来测试给定日期是否是星期一.

更新:如果要混合静态事件和/或[多个]可重复事件,可以使用addEventSource.

  • 使用`getDay()`[http://www.w3schools.com/jsref/jsref_getday.asp]原生函数.例如:`if(test_date.getDay()==(repeatable_day - 1))`...其中`repeatable_day`是你的变量.因为`getDay()`它是一个原生函数,所以你不需要DateJS.如果要进行2次以上的比较,可以使用`switch`. (2认同)

Bel*_*gor 8

克里斯托弗拉米雷斯的帖子略有更新.使用fullCalendar at v2.2.3和momentjs,v2.8.4您需要修改上面代码段中的几行以使其工作:

第一:

function(start, end, callback) {}
Run Code Online (Sandbox Code Playgroud)

function(start, end, status, callback) {}
Run Code Online (Sandbox Code Playgroud)

因为第三个参数是布尔值,第四个是回调函数

然后:

for (loop = start.getTime();
     loop <= end.getTime();
...
Run Code Online (Sandbox Code Playgroud)

for (loop = start._d.getTime();
     loop <= end._d.getTime();
Run Code Online (Sandbox Code Playgroud)

因为传递给函数的开始和结束对象不是Date对象,并且对它们调用.getTime()将最终出现在'Undefined is not a function'错误中.

就是这样!这些修正案对我有用.