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

已实现每周重复,如何用fullCalendar.js实现交替周重复事件?

实现fullCalendar交替周重复事件的可行方案

嘿,我来帮你搞定fullCalendar的交替周重复事件需求!fullCalendar本身没有内置的“隔周重复”配置项,但我们有两种靠谱的实现方式,都能完美达成你的需求:

方法一:动态生成事件(推荐)

这种方式通过events回调函数,根据当前视图的日期范围,主动计算出符合交替周条件的日期,生成对应的事件对象,逻辑清晰且性能友好。

$('#calendar').fullCalendar({
    defaultDate: moment(),
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    },
    defaultView: 'month',
    events: function(start, end, timezone, callback) {
        const events = [];
        // 定义要重复的星期几:1=周一,4=周四
        const targetWeekdays = [1, 4];
        // 设定交替规则:这里是奇数周(第1、3、5...周)重复,改成0就是偶数周
        const targetWeekMod = 1;

        let currentDate = moment(start);
        // 遍历视图覆盖的所有日期
        while (currentDate.isBefore(end)) {
            const dayOfWeek = currentDate.isoWeekday();
            const weekNumber = currentDate.isoWeek();

            // 同时满足「目标星期几」和「交替周条件」时,添加事件
            if (targetWeekdays.includes(dayOfWeek) && weekNumber % 2 === targetWeekMod) {
                events.push({
                    title: "My alternating weekly event",
                    start: currentDate.clone().set({ hour: 10, minute: 0 }),
                    end: currentDate.clone().set({ hour: 14, minute: 0 }),
                    allDay: false
                });
            }
            currentDate.add(1, 'day');
        }
        callback(events);
    }
});

关键说明:

  • 用isoWeek()获取ISO标准周数(国际通用,每年第一周至少含4天在当年),如果需要适配本地周规则,换成week()即可
  • 调整targetWeekMod的值(0或1),就能切换是偶数周还是奇数周重复
  • 如果需要从某个特定日期开始计算交替周,可以在weekNumber的基础上减去起始日期的周数,再取余判断

方法二:用eventRender过滤事件

如果你想保留原有的事件定义方式,也可以通过eventRender回调拦截渲染,只显示符合交替周条件的事件:

$('#calendar').fullCalendar({
    defaultDate: moment(),
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
    },
    defaultView: 'month',
    events: [{
        title: "My repeating event",
        start: '10:00',
        end: '14:00',
        dow: [1, 4]
    }],
    eventRender: function(event, element, view) {
        const eventWeek = moment(event.start).isoWeek();
        // 同样设定奇数周显示,偶数周隐藏
        const targetWeekMod = 1;
        // 不符合条件则阻止渲染
        return eventWeek % 2 === targetWeekMod;
    }
});

关键说明:

  • 这种方式保留了原有的dow重复规则,只是在渲染阶段过滤掉不符合交替周的事件
  • 逻辑更轻量,但如果视图范围内事件较多,性能略逊于动态生成的方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:40