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

FullCalendar v5.8.0:listMonth视图下如何隐藏周末日程?

在FullCalendar v5.8.0的listMonth视图中隐藏周末日程

你的代码中已经设置了weekends: false,但这个配置主要用于日历类视图(如月视图)中隐藏周末的日期单元格,在listMonth列表视图里不会自动过滤掉发生在周末的日程。要实现隐藏周末日程的需求,可以通过eventFilter回调函数来过滤事件。

修改后的完整代码如下:

calendar = new FullCalendar.Calendar(calendarEl, {
    initialView: 'listMonth',
    themeSystem: 'bootstrap',
    headerToolbar: {
        left: 'prev,next today',
        center: 'title',
        right: 'listMonth',
    },
    locale: 'en',
    timeZone: 'Asia/Almaty',
    height: 800,
    weekends: false,
    // 过滤周末事件的回调函数
    eventFilter: function(event) {
        const start = event.start;
        const end = event.end || event.start; // 兼容无结束时间的事件
        let isWorkdayEvent = true;

        // 遍历事件覆盖的所有日期,检查是否包含周末
        const checkDate = new Date(start);
        while (checkDate < end) {
            const dayOfWeek = checkDate.getDay();
            // 0代表周日,6代表周六
            if (dayOfWeek === 0 || dayOfWeek === 6) {
                isWorkdayEvent = false;
                break;
            }
            checkDate.setDate(checkDate.getDate() + 1);
        }

        // 针对全天事件的简化判断
        if (event.allDay) {
            const startDay = start.getDay();
            const endDay = end.getDay();
            isWorkdayEvent = (startDay !== 0 && startDay !== 6) && (endDay !== 0 && endDay !== 6);
        }

        return isWorkdayEvent;
    }
});

代码说明

  • eventFilter会逐个检查每个事件,返回true则显示该事件,返回false则隐藏。
  • 对于非全天事件,遍历其覆盖的每一天,只要包含周末日期,就隐藏该事件。
  • 对于全天事件,直接判断开始和结束日期是否都为工作日,确保只有完全在工作日的全天事件才会显示。

如果你的需求是允许显示跨工作日和周末的事件(仅隐藏完全在周末的事件),可以调整eventFilter的判断逻辑,改为检查事件是否有至少一天在工作日即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:46:10