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

如何在FullCalendar的悬浮提示框中显示事件的起止时间?

解决FullCalendar月视图事件悬浮提示框的时间格式化问题

我来帮你搞定这个问题!你遇到的情况是因为JavaScript中Date对象直接用+拼接时会被自动转换为时间戳数字,而不是你看到的那种友好的日期字符串。当你单独把event.start或event.end传给popover的content时,popover内部会自动把Date对象转为字符串(也就是调用Date.toString()),所以显示正常;但两个Date对象相加时,JS会先把它们都转成时间戳数值再计算,结果就变成了一串数字。

要实现你想要的Start: 9AM End: 3PM格式,我们需要先把Date对象格式化为指定的字符串样式,这里有两种常用方法:

方法一:自定义时间格式化函数

自己写一个简单的函数,把Date对象转换成12小时制带AM/PM的格式:

// 定义格式化函数
function formatTo12Hour(date) {
  let hours = date.getHours();
  const period = hours >= 12 ? 'PM' : 'AM';
  // 把24小时制转成12小时制,0点转为12
  hours = hours % 12 || 12;
  return `${hours}${period}`;
}

// 调用函数格式化时间
element.popover({
  content: `Start: ${formatTo12Hour(event.start)} End: ${formatTo12Hour(event.end)}`,
  animation: true,
  delay: 300,
  trigger: 'hover',
  placement: 'top',
  container: 'body'
});

方法二:用FullCalendar自带的moment.js(如果已引入)

如果你的FullCalendar项目已经依赖了moment.js(很多FullCalendar版本默认会用它处理日期),可以直接用moment的格式化能力,代码更简洁:

element.popover({
  content: `Start: ${moment(event.start).format('hA')} End: ${moment(event.end).format('hA')}`,
  animation: true,
  delay: 300,
  trigger: 'hover',
  placement: 'top',
  container: 'body'
});

这里的hA是moment的格式化标记:h表示12小时制的小时数,A表示大写的AM/PM。

如果之后你需要显示更完整的日期(比如加上年月日),只需要调整格式化字符串即可,比如moment里用MMM D, YYYY hA就能得到May 9, 2018 9AM这样的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:08