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

修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:38:10