修改FullCalendar的resourceTimelineMonth视图以显示完整周
修改FullCalendar的resourceTimelineMonth视图以显示完整周
嗨,我来帮你搞定这个FullCalendar视图的调整问题~
你提到的resourceTimelineMonth视图默认是从每月1号显示到月末,但你需要让视图展示完整的第一周和最后一周,比如2025年4月,要包含3月31日(周一),以及4月30日之后的周四到周日对吧?
其实通过自定义视图的visibleRange配置就能实现这个需求,我给你整理了具体的代码示例和说明:
views: { resourceTimelineMonth: { // 保持视图的核心月度时长 duration: { months: 1 }, // 自定义可见日期范围,确保首尾周完整显示 visibleRange: function(currentDate) { // 获取当前视图对应月份的第一天 const firstDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1); // 计算第一周的起始日(这里以周一作为周起始,可根据需求调整) const startOfFirstWeek = new Date(firstDayOfMonth); startOfFirstWeek.setDate(firstDayOfMonth.getDate() - firstDayOfMonth.getDay() + 1); // 特殊处理:如果当月第一天是周日,getDay()返回0,需要再往前推一周 if (firstDayOfMonth.getDay() === 0) { startOfFirstWeek.setDate(startOfFirstWeek.getDate() - 7); } // 获取当前视图对应月份的最后一天 const lastDayOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0); // 计算最后一周的结束日(这里以周日作为周结束) const endOfLastWeek = new Date(lastDayOfMonth); endOfLastWeek.setDate(lastDayOfMonth.getDate() + (7 - lastDayOfMonth.getDay())); return { start: startOfFirstWeek, end: endOfLastWeek }; } } }
关键逻辑说明:
duration: { months: 1 }:保持视图的核心逻辑还是月度视图,不会改变整体的视图类型visibleRange函数:根据当前视图的日期动态计算可见范围- 针对月初:找到当月第一天所在周的周一,如果第一天是周日,就再往前推一周,确保第一周完整显示
- 针对月末:找到当月最后一天所在周的周日,把该周剩余的日期都包含进来
- 如果你的周起始日是周日而非周一,只需要把
startOfFirstWeek计算里的+1改成+0就行,适配不同的周起始习惯
这样配置后,resourceTimelineMonth视图就会自动展示完整的首尾周,包含跨月的日期啦~
备注:内容来源于stack exchange,提问作者Yosu
相关产品推荐
相关产品推荐

