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

如何在FullCalendar中实现自定义起始日的滚动30天月网格视图

FullCalendar 自定义固定范围月风格网格实现方案

原生FullCalendar确实没有提供直接配置任意起止日期的月网格视图,但可以通过扩展内置月视图的方式零侵入实现,完全保留原生月视图的周表头、单元格布局、事件渲染逻辑,不需要修改核心源码。

  • 核心实现逻辑
    基于dayGridMonth视图类型做扩展,仅重写视图的可见日期范围计算规则,其余渲染逻辑全部复用原生月视图能力,保证样式和交互一致性。
  • v6版本可直接运行的实现代码
import { Calendar } from '@fullcalendar/core'
import dayGridPlugin from '@fullcalendar/daygrid'

const calendarEl = document.getElementById('calendar')
const calendar = new Calendar(calendarEl, {
  plugins: [dayGridPlugin],
  views: {
    customRangeMonthGrid: {
      type: 'dayGridMonth', // 全量继承月网格的渲染规则、样式、表头结构
      fixedWeekCount: true, // 固定6行网格高度,和标准月视图布局完全一致
      visibleRange: () => {
        // 此处自定义起止日期,例:首日为5月23日、末日为6月23日
        const rangeStart = new Date(2024, 4, 23) // 月份为0索引,4对应5月
        const rangeEnd = new Date(rangeStart)
        rangeEnd.setDate(rangeEnd.getDate() + 31) // 多算1天适配周对齐补位,避免最后一行截断
        return { start: rangeStart, end: rangeEnd }
      }
    }
  },
  initialView: 'customRangeMonthGrid',
  dateIncrement: { days: 30 }, // 点击前后切换按钮时,每次滚动30天范围
  showNonCurrentDates: true // 设为false可隐藏范围外补位的日期,仅保留空白占位
})

calendar.render()
  • 动态调整起始日期方法
    需要修改网格起止日期时,不需要销毁日历实例,直接调用setOption更新visibleRange配置即可,视图会自动沿用月网格样式重绘。
  • 实现注意事项
    • 不要直接使用基础dayGrid视图配置30天时长,该视图会自动按自然周截断范围,无法保留月视图的固定行高、表头布局
    • 计算结束日期时多预留1天是为了适配FullCalendar月视图按整周对齐的渲染规则,避免最后一周只显示部分日期,超出30天范围的补位日期可以通过自定义CSS添加灰化标记,和原生月视图的非当月日期样式保持一致
    • 如果不需要显示补位日期,将showNonCurrentDates设为false即可,网格只会渲染你设定的日期区间,单元格占位仍和标准月视图一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:43