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

React-big-calendar结合dayjs时长事件周日及结束日不显示问题排查

问题排查与修复方案

核心问题分析

你遇到的两个现象(周日不显示事件、结束日期不显示事件)分别对应react-big-calendar的两个常见配置问题:


1. 结束日期不显示:endAccessor 的排他性规则

react-big-calendar 对结束时间的处理是排他的——事件只会渲染到结束时间的前一秒。你的事件结束时间是Tue Aug 29 2023 15:44:00 GMT+0300,这意味着在8月29日的日历视图中,事件仅覆盖到当天15:44之前的时段;在月视图中,因为事件没有占据全天,可能被判定为"不在当天完整显示"而被隐藏。

修复方法:
如果希望事件显示到结束日期的全天,把结束时间调整为结束日期的次日0点,或者当天的23:59:59。例如:

// 假设你的事件数据是对象,修改endTime
const adjustedEvent = {
  ...event,
  endTime: dayjs(event.endTime).add(1, 'day').startOf('day').toDate()
}

2. 周日不显示:周起始未匹配芬兰locale

芬兰地区的周起始是周一,但react-big-calendar不会自动通过culture="fi"同步周起始规则,需要显式指定weekStartsOn属性:

修复方法:
在Calendar组件中添加weekStartsOn={1}(0代表周日,1代表周一):

<Calendar
  // 其他属性不变
  weekStartsOn={1}
/>

额外优化建议

如果你希望跨多天的非全天事件在日历中更清晰显示,可以开启showMultiDayTimes属性(你之前注释掉了):

showMultiDayTimes={true}

完整修改后的组件代码

import { Calendar, dayjsLocalizer } from "react-big-calendar";
import 'react-big-calendar/lib/css/react-big-calendar.css';
import dayjs from "dayjs";
import fi from 'dayjs/locale/fi';
dayjs.locale(fi)

// 补充localizer初始化代码(你原代码中未显示这部分)
const localizer = dayjsLocalizer(dayjs);

<Calendar
  culture="fi"
  events={data}
  titleAccessor="definition"
  localizer={localizer}
  startAccessor="startTime"
  endAccessor="endTime"
  style={{ height: 600 }}
  messages={defaultMessagesFi}
  defaultView={'month'}
  views={['day', 'week', 'work_week', 'month','agenda']}
  scrollToTime={dayjs().set('hour', 8).set('minute', 0).set('second', 0)}
  showMultiDayTimes={true}
  weekStartsOn={1}
/>

另外还要检查你的data数组中,所有事件的startTime和endTime是否都是标准的Date对象,或者dayjs可以正确解析的格式,格式错误也会导致事件渲染异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:15