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

FullCalendar 3.1更新/删除弹窗中如何显示已保存的日期数据

核心原因

HTML5 datetime-local 类型的输入框仅支持 YYYY-MM-DDTHH:mm 格式的字符串赋值,你当前直接传入Date对象或其他格式的日期字符串,浏览器无法识别,所以不会显示内容。

具体修改步骤

  1. 修正日期格式转换逻辑
    你之前注释的moment用法格式错误,datetime-local要求时间部分前加大写字母T,且小时使用24小时制的HH,不要用12小时制的hh。
  2. 修正event.end为空时的赋值方法
    输入框赋值需要用val()方法,你当前用的text()对input元素无效。

修改后的updateEvent核心代码

function updateEvent(event, element) {
    if ($(this).data("qtip")) $(this).qtip("destroy");

    currentUpdateEvent = event;

    $('#updatedialog').dialog('open');
    $("#eventName").val(event.title);
    $("#eventDesc").val(event.description);
    $("#eventId").val(event.id);
    // 改动:转换为datetime-local支持的格式
    $("#eventStart").val(moment(event.start).format("YYYY-MM-DDTHH:mm"));
    
    $("#colorPicker").val(event.color);
    $("#EditEventNote").val(event.note);
    
    if (event.end === null) {
        // 改动:input用val赋值,不用text
        $("#eventEnd").val("");
    }
    else {
        // 改动:转换为datetime-local支持的格式
        $("#eventEnd").val(moment(event.end).format("YYYY-MM-DDTHH:mm"));
    }

    return false;
}

无moment依赖的原生JS方案

如果不想引入moment库,可以自己写个格式转换函数:

// 转换日期为datetime-local支持的格式
function formatDatetimeLocal(date) {
    const targetDate = new Date(date);
    const fillZero = (num) => num < 10 ? '0' + num : num;
    return `${targetDate.getFullYear()}-${fillZero(targetDate.getMonth()+1)}-${fillZero(targetDate.getDate())}T${fillZero(targetDate.getHours())}:${fillZero(targetDate.getMinutes())}`;
}

赋值时替换为以下写法即可:

$("#eventStart").val(formatDatetimeLocal(event.start));
$("#eventEnd").val(formatDatetimeLocal(event.end));

时区问题排查

如果赋值后显示的时间比实际时间差8小时,说明你拿到的event.start是UTC时间,把转换方法里的getFullYear、getMonth等方法替换为对应的UTC方法(getUTCFullYear、getUTCMonth)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:24:02