FullCalendar v3.10调用gotoDate跳转日期出现日月颠倒故障排查
问题根因
- FullCalendar v3的
gotoDate方法优先接收Moment对象或ISO 8601标准格式(YYYY-MM-DD)的日期字符串,你传入DD/MM/YYYY格式的字符串时,FullCalendar会默认按照美式MM/DD/YYYY规则解析,直接导致日月属性颠倒。 - 补充:初始代码存在低级错误:已经把输入值赋值给
res变量,后续又错误调用res.val(),导致日期解析失败,FullCalendar自动 fallback 到当前日期,所以后台才会收到当日的start/end参数。
正确修改方案
第一步:修改前端跳转逻辑,直接传入Moment对象
不要自行格式化字符串传给gotoDate,直接把解析好的Moment对象传入即可,避免字符串解析歧义:
$(document).ready(function () { $("#btnsearch").click(function (e) { // 阻止asp:Button默认提交表单行为,避免页面刷新 e.preventDefault(); var res = $("#txtSearch").val().trim(); // 按输入的DD/MM/YYYY HH:mm格式严格解析,开启严格模式避免自动容错 var targetDate = moment(res, "DD/MM/YYYY HH:mm", true); // 非法日期校验 if (!targetDate.isValid()) { alert("请输入正确的日期格式:DD/MM/YYYY HH:mm"); return; } // 直接传入Moment对象,不需要额外format转换 $("#calendar").fullCalendar('gotoDate', targetDate); }); });
第二步:统一前后端日期传输格式(可选,彻底避免日期解析错乱)
如果后台接收FullCalendar自动传入的start/end参数时也存在格式歧义,可在FullCalendar初始化时添加配置,强制用ISO 8601格式传输日期:
$('#calendar').fullCalendar({ // 其他原有配置保持不变 eventSource: { url: 'JsonResponse.ashx', // 强制传给后台的日期为ISO标准格式 startParam: 'start', endParam: 'end', format: 'YYYY-MM-DD HH:mm:ss' } });
后台C#接收参数时直接按yyyy-MM-dd HH:mm:ss格式解析即可,完全消除区域格式差异导致的日期错乱问题。
内容的提问来源于stack exchange,提问作者ISO
相关产品推荐
相关产品推荐

