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
相关产品推荐
相关产品推荐

