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

FullCalendar v3升级v6:renderEvent与formatDate替代方案咨询

FullCalendar v3 升级到 v6:formatDate 和 renderEvent 替代方案及重复事件问题解决

一、日期格式化替代($.fullCalendar.formatDate)

v6 移除了全局的$.fullCalendar.formatDate方法,可通过以下两种方式实现日期格式化:

1. 原生 JavaScript Date API 实现

v6 的drop回调中,date参数为原生Date对象,直接拼接格式化字符串即可:

value: `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`

2. 使用 FullCalendar 内置工具

若你通过模块化方式引入 FullCalendar,可导入核心包的formatDate函数:

// 模块化导入(需确保已安装@fullcalendar/core)
import { formatDate } from '@fullcalendar/core';

// 格式化调用
value: formatDate(date, { year: 'numeric', month: '2-digit', day: '2-digit' })

二、renderEvent替代及重复事件问题解决

v3 的$("#calendar").fullCalendar("renderEvent", ...)在 v6 中已废弃,正确方式是通过日历实例调用addEvent,你遇到的重复问题源于代码逻辑错误,修复方案如下:

1. 提前保存日历实例

初始化日历时务必保存实例引用,后续操作都基于该实例:

// 初始化日历并保存实例
const calendar = new FullCalendar.Calendar(document.getElementById('calendar'), {
  // 你的日历配置(包含drop回调)
});
calendar.render();

2. 修正事件添加逻辑

你的代码存在未使用定义变量、对象引用混乱的问题,修正后代码:

.done(function(data) {
  if (data.success) {
    var event = data.event;
    // 直接使用服务器返回数据构建事件对象
    var eventDataObj = {
      id: event.id,
      title: `${event.id} : ${event.title}`,
      start: event.start, // 确保服务器返回ISO字符串或合法Date对象
      end: event.end
    };

    // 通过日历实例调用addEvent,第二个参数true表示持久化到事件源
    calendar.addEvent(eventDataObj, true);
  }
});

重复事件原因说明

你之前用$("#calendar").addEvent属于非标准用法,v6 不再支持通过jQuery选择器直接调用日历方法,且代码中未使用正确的事件对象(定义了eventDataObj却用了未声明的eventObject),双重原因导致重复显示。使用初始化时保存的日历实例调用addEvent是官方推荐的正确方式。

三、完整修正后的drop回调示例

drop: function(date, allDay) {
  var dataStr = [
    {
      name: "calendar_event_title",
      value: $("#calendarInput").val()
    },
    {
      name: "calendar_date_start",
      value: `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
    }
  ];

  dataStr = $.param(dataStr);

  $.ajax({
    // 补充你的AJAX配置(url、请求类型、请求头等)
  })
  .done(function(data) {
    if (data.success) {
      var event = data.event;
      var eventDataObj = {
        id: event.id,
        title: `${event.id} : ${event.title}`,
        start: event.start,
        end: event.end
      };

      calendar.addEvent(eventDataObj, true);
    }
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:18:13