Symfony6+FullCalendar4:dayGridMonth视图无法显示时间及点标记求助
问题
在Symfony 6 + FullCalendar 4 + CalendarBundle的环境下,想要在dayGridMonth(月视图)的事件前显示时间格式(例如“8p - 事件”),同时当前视图未显示点标记。即使取消注释displayEventTime配置项,时间仍无法正常显示。
核心问题分析与修复步骤
1. 前端eventContent覆盖默认时间渲染
你的eventContent回调完全自定义了事件HTML,只返回处理后的标题,直接覆盖了FullCalendar默认的时间显示逻辑——即使开启displayEventTime也不会生效。
修改前端app.js代码:
- 取消注释
displayEventTime: true - 修改
eventContent,将格式化后的时间与标题拼接:
document.addEventListener("DOMContentLoaded", () => { let calendarEl = document.getElementById("calendar-holder"); let { eventsUrl } = calendarEl.dataset; let calendar = new Calendar(calendarEl, { editable: true, firstDay: 1, height: "auto", locales: allLocales, locale: 'en', eventSources: [ { url: eventsUrl, method: "POST", extraParams: { filters: JSON.stringify({}) }, failure: () => { // alert("There was an error while fetching FullCalendar!"); }, }, ], headerToolbar: { left: "prev,next today", center: "title", right: "dayGridMonth,timeGridWeek,timeGridDay,listWeek, listMonth" }, initialView: "dayGridMonth", eventDisplay: "block", displayEventTime: true, // 开启时间显示 navLinks: true, plugins: [ dayGridPlugin, timeGridPlugin, listPlugin ], timeZone: "UTC", eventContent: function(arg) { // 拼接时间文本和标题,保留换行处理 let timeText = arg.timeText ? `<span class="fc-event-time">${arg.timeText}</span> - ` : ''; let titleHtml = arg.event.title.replace(/\n/g, '<br>'); return { html: `${timeText}${titleHtml}` } }, }); let lang = calendarEl.dataset.lang; calendar.render(); calendar.setOption('locale', lang); });
2. 确保后端事件标记为非全天
只有非全天事件,FullCalendar才会在月视图中显示时间:
- 确认
$this->configDataService->get('eventByTime') == 'YES'的判断逻辑正确,确保带时间的事件被设置为setAllDay(false) - 检查
$eventStartDate和$eventEndDate是否包含完整的时分秒信息,而非仅日期
3. 关于“点标记”的说明
FullCalendar月视图的显示规则:
- 全天事件(
allDay: true)默认显示为点标记 - 非全天事件(
allDay: false)默认显示为块级事件
若需非全天事件同时显示时间和点标记,需自定义CSS调整样式,但会与时间显示布局冲突,建议根据需求二选一。
内容的提问来源于stack exchange,提问作者DJ Michael Constanta
相关产品推荐
相关产品推荐

