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

fullCalendar无法传递自定义sdate参数至后端?求解决方案

解决fullCalendar传递当月首日参数的问题

我明白你遇到的困扰了——你想把当月首日作为sdate参数传给后端,但现在POST请求里只有fullCalendar自动添加的start(视图可见区间的首日)和end,完全看不到你定义的sdate。这是因为你原来的data是静态对象,只会在日历初始化时计算一次,后续切换视图或月份时的请求根本不会更新这个值。

问题根源拆解

当你把data写成静态对象时,sdate: $("#calendar_1").fullCalendar('getView').intervalStart这行代码只在页面加载、日历首次初始化时执行一次。之后不管你怎么切换月份、切换到周/日视图,fullCalendar发送请求时都会沿用这个初始值,而且它还会自动追加当前视图的start和end参数,导致你预期的sdate根本没被正确传递。

解决方案:把data改成动态函数

要实现每次请求都传递当前视图对应的当月首日,你需要把data从静态对象改成返回参数对象的函数。这样每次fullCalendar发送事件请求时,都会执行这个函数,动态计算最新的参数值。

修改后的完整代码如下:

$('#calendar_1').fullCalendar({
    header : {
        left : 'prev,next today',
        center : 'title',
        right : 'month,agendaWeek,agendaDay'
    },
    defaultView : 'month',
    eventSources: [
        {
            url: 'holidays.php',
            type: 'POST',
            // 将data改为函数,动态生成请求参数
            data : function() {
                // 获取当前视图的起始日期
                const viewStart = $("#calendar_1").fullCalendar('getView').intervalStart;
                // 计算当前视图对应的当月第一天(依赖fullCalendar内置的moment.js)
                const firstDayOfMonth = viewStart.clone().startOf('month');
                return {
                    sdate: firstDayOfMonth.format('YYYY-MM-DD'),
                    common: 'Common'
                };
            },
            error: function() {
                alert('there was an error while fetching events!');
            },
            color: 'yellow',
            textColor: 'black'
        }
    ],
    eventRender : function(event, element, view) {
        const date = event.start.format("YYYY-MM-DD");
        $(view.el[0]).find(`.fc-day[data-date=${date}]`).css('background-color','#FAA732');
    }
});

关键细节说明

  1. 动态计算当月首日:用viewStart.clone().startOf('month')可以基于当前视图的起始日期,快速得到对应月份的第一天(fullCalendar内置了moment.js,直接用就行)。
  2. 函数式data的优势:每次请求都会触发这个函数,确保sdate始终是当前视图对应的月份第一天,不管你是切换月份、切换到周视图还是日视图。
  3. 关于默认的start/end参数:fullCalendar还是会自动把这两个参数加到请求里,但这不影响你自定义的sdate,后端可以正常获取到sdate的值。

现在再用print_r($_POST)查看,就能看到包含sdate(当月首日)、common,以及fullCalendar自动添加的start和end参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:11:10