[fullCalender vue]使用fullCalender进行事件存储出现的时间不同步问题

问题描述:

如图所示,系统中,我要在5:00-5:30这个时间段添加一个事件。

但是添加完事件后,事件没有在5:00-5:30的时间段。反而跑到了前一天的21:00-21:30时间段了。

原因分析:

两个时间差了8个小时。

fullCalender默认使用ISO8601字符串。

在我把字符串传入后端的时候。

后端springboot使用LocalDateTime,默认格式为yyyy-MM-dd HH:mm:ss,不带时区。

数据库使用DATETIME存储,不支持时区。

所以前端的时间传入后端的时候。会偏移8个小时。

后端的数据回显给前端时候,fullCalender没正确识别。导致时间显示错误问题。

解决方案:

正常来讲。应该是更改后端的存储方式,存储ISO字符串。

但是这样太过麻烦。

我直接修改前端的传入方式。

也就是说,前端显示为0:00,那我就传给后端0:00,后端存储0:00。

这样可以省略掉前后端不断转化格式,传来传去的麻烦。

但同时也有一个后果,后端无法存储时区信息。

具体解决代码:

dayjs(currentEvent.value.startTime).format('YYYY-MM-DD HH:mm:ss')

通过dayjs将时间转化为YYYY-MM-DD HH:mm:ss格式

后端统一返回格式

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    return objectMapper;
}

fullCalender渲染配置

const transfromEvents = (apiEvents) => {
  return apiEvents.map((event) => ({
    id: event.id,
    title: event.title,
    start: new Date(event.startTime),
    end: new Date(event.endTime),
    backgroundColor: getEventColor(event.type),
    borderColor: getEventColor(event.type),
    extendedProps: {
      type: event.type,
    },
  }))
}

问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林总肿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值