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

FullCalendar 3.10 JavaScript更新/删除对话框中如何给开始日期加30分钟

问题说明

你的代码存在以下几个核心错误导致不生效:

  • 提交给后端的eventToUpdate对象中,start字段直接使用了输入框的原始值,没有添加30分钟,后端存储的仍是旧时间,后续refetchEvents拉取数据后会覆盖前端临时修改的内容
  • 仅修改了前端currentUpdateEvent对象的时间,没有和提交给后端的数据同步,前后端数据不一致
  • 原注释中的写法逻辑有误:直接调用val()传参只会修改输入框内容,不能直接生成计算后的Date对象;原生Date的分钟计算需要基于已解析的Date实例,不能直接对输入框字符串做加法
修复后的代码
$('#updatedialog').dialog({
    autoOpen: false,
    width: 680,
    buttons: {
        "update": function () {
            // 先解析开始时间,加30分钟
            const originalStart = new Date($("#eventStart").val());
            const updatedStart = new Date(originalStart);
            updatedStart.setMinutes(updatedStart.getMinutes() + 30);

            // 如果需要结束时间也同步顺延30分钟,可以放开下面的代码
            // const originalEnd = new Date($("#eventEnd").val());
            // const updatedEnd = new Date(originalEnd);
            // updatedEnd.setMinutes(updatedEnd.getMinutes() + 30);

            var eventToUpdate = {
                id: currentUpdateEvent.id,
                title: $("#eventName").val(),
                description: $("#eventDesc").val(),
                color: $("#colorPicker").val(),
                start: updatedStart, // 使用加了30分钟的时间
                end: new Date($("#eventEnd").val()), // 如果要顺延就改成updatedEnd
                note: $("#EditEventNote").val()
            };
            
            // 建议把后续更新日历、关闭弹窗的逻辑放到updateSuccess回调中,避免异步请求未完成就刷新
            PageMethods.UpdateEvent(eventToUpdate, updateSuccess);
            $(this).dialog("close");

            currentUpdateEvent.title = $("#eventName").val();
            currentUpdateEvent.description = $("#eventDesc").val();
            currentUpdateEvent.color = $("#colorPicker").val();
            currentUpdateEvent.note = $("#EditEventNote").val();
            currentUpdateEvent.start = updatedStart;
            $('#calendar').fullCalendar('updateEvent', currentUpdateEvent);
            $('#calendar').fullCalendar('refetchEvents');         
        }
    }
});

如果你项目中已经引入了Moment.js,可以替换时间计算逻辑,避免原生Date的格式解析、时区问题:

// 用Moment计算加30分钟的时间
const updatedStart = moment($("#eventStart").val()).add(30, 'm').toDate();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:18:03