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

如何将FullCalendar两个时间段配置合并到同一日历渲染?

FullCalendar 实现两个不连续时间段显示

你不能通过创建两个绑定到同一DOM的日历实例来实现需求——第二个实例渲染时会完全覆盖第一个实例的内容,每个DOM元素只能绑定一个FullCalendar实例。

要在同一个日历中显示10:30-12:00和14:30-19:00两个不连续时段,有两种可行方案:

方案一:利用FullCalendar内置时段控制功能

设置日历整体时间范围为最早到最晚的时间(10:30至19:00),通过businessHours定义有效时段,再用slotHiddenCallback隐藏非工作时段的时间槽:

$(document).on('click', '.dad-visita', function(){
    const initialViews = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) 
        ? 'timeGridWeek' 
        : 'timeGridWeek';

    const calendarEl = document.getElementById('calendario');
    const today = moment().day();

    const calendar = new FullCalendar.Calendar(calendarEl, {
        headerToolbar: {
            left: 'prev,next today',
            center: 'title',
            right: 'dayGridMonth,timeGridWeek,timeGridDay'
        },
        locale: "pt-br",
        buttonText:{
            today:    'Hoje',
            list:     'Lista'
        },
        navLinks: true,             
        firstDay: today,
        hiddenDays: [ 0 ],
        initialView: initialViews,
        editable: true,
        selectable: true, 
        unselectAuto:true,
        eventOverlap: false,
        eventColor: '#f16621', 
        slotDuration: '00:45',
        allDaySlot : false,
        eventStartEditable: false,
        eventDurationEditable:false,
        longPressDelay: 0,
        nowIndicator: "true",
        // 设置日历整体时间范围
        slotMinTime: '10:30',
        slotMaxTime: '19:00',
        contentHeight: 'auto',
        // 定义两个有效工作时段
        businessHours: [
            {
                start: '10:30',
                end: '12:00'
            },
            {
                start: '14:30',
                end: '19:00'
            }
        ],
        // 隐藏12:00-14:30之间的时间槽
        slotHiddenCallback: function(slotInfo) {
            const slotTime = slotInfo.start;
            const hour = slotTime.hour();
            const minute = slotTime.minute();
            return (hour >= 12 && hour <14) || (hour ===14 && minute <30);
        }
    });

    calendar.render();
});

方案二:自定义CSS隐藏中间时段

同样设置日历整体时间范围为10:30-19:00,通过CSS选择器定位并隐藏12:00-14:30对应的时间槽元素:

/* 根据实际DOM结构调整选择器,隐藏目标时段的时间槽 */
.fc-timegrid-slot[data-time="12:00"],
.fc-timegrid-slot[data-time="12:45"],
.fc-timegrid-slot[data-time="13:30"],
.fc-timegrid-slot[data-time="14:15"] {
    display: none;
}

对应的JavaScript代码只需合并为一个日历实例,设置slotMinTime: '10:30'和slotMaxTime: '19:00'即可,无需额外的时段回调逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:12:49