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

如何将fullCalendar的24小时制时间转为12小时制(带AM/PM)并在popover中显示?

解决FullCalendar时间格式转换并在Popover中显示12小时制(带AM/PM)的问题

我懂你现在的困扰——直接拼接event.start和event.end只会输出默认的Date字符串格式,完全达不到想要的12小时制带AM/PM的效果。下面给你两种亲测有效的解决方案,帮你搞定这个问题:

方法1:用Moment.js(FullCalendar标配工具)

FullCalendar多数版本都和Moment.js适配得很好,用它格式化时间最省心:

先确认项目里已经引入了Moment.js(没引入的话,直接在页面加个script标签就行),然后修改你的eventMouseover代码:

eventMouseover: function (event, jsEvent) {
  // 把时间格式化为12小时制,带AM/PM标识
  var formattedStart = moment(event.start).format('hh:mm A');
  var formattedEnd = moment(event.end).format('hh:mm A');
  
  $(this).popover({ 
    html: true, 
    placement: 'left', 
    trigger: 'hover', 
    content: `${formattedStart} - ${formattedEnd}`, 
    container: '#calendar' 
  }).popover('toggle');
}

格式符说明:

  • hh:12小时制的小时(带前导零,比如09、02)
  • mm:两位数字的分钟(带前导零)
  • A:大写的AM/PM(想要小写的话换成a)

方法2:原生JavaScript实现(无需额外库)

如果不想引入Moment.js,用原生的Intl.DateTimeFormat也能实现:

先写一个通用的格式化函数:

function formatTo12Hour(date) {
  return new Intl.DateTimeFormat('en-US', {
    hour: '2-digit',
    minute: '2-digit',
    hour12: true
  }).format(date);
}

再修改你的事件监听代码:

eventMouseover: function (event, jsEvent) {
  var formattedStart = formatTo12Hour(event.start);
  var formattedEnd = formatTo12Hour(event.end);
  
  $(this).popover({ 
    html: true, 
    placement: 'left', 
    trigger: 'hover', 
    content: `${formattedStart} - ${formattedEnd}`, 
    container: '#calendar' 
  }).popover('toggle');
}

为啥之前的eventRender方法没生效?

大概率是你在eventRender里的处理没关联到popover的动态内容——eventRender主要负责渲染事件元素本身,而popover是鼠标悬停时才生成的,所以必须在eventMouseover里直接处理时间格式化,提前在eventRender里设置是无效的。

另外要注意:确保event.start和event.end是有效的Date对象,如果你的FullCalendar配置里时间是字符串格式,得先转换成Date再格式化哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:35:42