ASP.NET Core集成FullCalendar时出现Moment.js日期格式弃用警告
问题原因
这个弃用警告的触发原因是:你代码中多处传入MM/DD/YYYY h:mm A格式的非标准日期字符串给moment构造函数,moment无法识别该格式为RFC2822/ISO标准格式,因此回退调用浏览器原生Date()解析,不同浏览器解析逻辑不一致就会触发该警告,未来版本的moment会移除对非标准格式的回退支持。
修复步骤
- 第一步:调用moment解析非标准格式日期时,显式指定匹配的格式参数
你有两处需要修改:
- 读取表单时间输入框值创建moment实例的部分:
// 修改前 const startTime = moment($('#StartTime').val()); const endTime = moment($('#EndTime').val()); // 修改后 const startTime = moment($('#StartTime').val(), "MM/DD/YYYY h:mm A"); const endTime = moment($('#EndTime').val(), "MM/DD/YYYY h:mm A");
- 如果
formatDate函数接收的参数可能是非标准字符串格式,也可以补充格式参数:
// 修改前 const formatDate = date => date === null ? '' : moment(date).format("MM/DD/YYYY h:mm A"); // 修改后 const formatDate = date => date === null ? '' : moment(date, "MM/DD/YYYY h:mm A").format("MM/DD/YYYY h:mm A");
- 第二步:替换moment私有属性调用
你代码中直接读取startTime._i、endTime._i的写法不规范,_i是moment内部私有属性,对外不保证稳定性,建议替换为显式的format调用:
// 修改前 const event = { title, description, isAllDay, startTime: startTime._i, endTime: endTime._i }; // 修改后 const event = { title, description, isAllDay, startTime: startTime.format("MM/DD/YYYY h:mm A"), endTime: endTime.format("MM/DD/YYYY h:mm A") };
- 第三步(可选优化):统一使用ISO标准日期格式
从根源避免格式解析问题,你可以调整flatpickr的输出格式为ISO 8601标准格式:
const fpStartTime = flatpickr("#StartTime", { enableTime: true, dateFormat: "Y-m-dTH:i:S" // ISO标准格式 }); const fpEndTime = flatpickr("#EndTime", { enableTime: true, dateFormat: "Y-m-dTH:i:S" });
同时后端接口返回的日期也统一为ISO格式,后续所有moment调用都不需要额外指定格式参数,也不会触发格式警告。
内容的提问来源于stack exchange,提问作者Luciano Claudio
相关产品推荐
相关产品推荐

