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

Bootstrap datetimepicker步进异常:步长45分钟时小时错误跳转

解决datetimepicker步进45分钟时的小时进位错误问题

这个问题我之前也碰到过!本质是这款datetimepicker的默认步进逻辑有计算漏洞:当你设置stepping:45时,插件处理分钟累加时,没有正确计算超过60分钟后的剩余分钟数,反而错误地保留了步进值(45),同时直接给小时加1,导致12:45点击增加后变成01:45,而非预期的01:30。

解决方案1:自定义时间修正逻辑

我们可以通过监听dp.change事件,手动修正时间计算,确保分钟数按照累加45后的正确模60结果显示:

$("#startDate").datetimepicker({ 
    format:'YYYY/MM/DD HH:mm', 
    locale: g_state_language, 
    useCurrent: false, 
    stepping: 45, 
    defaultDate: false, 
    sideBySide:true 
})
// 保存初始日期,用于判断是增加还是减少操作
.on('dp.show', function(e) {
    const picker = $(this).data('DateTimePicker');
    $(this).data('prevDate', picker.date().clone());
})
.on('dp.change', function(e) {
    const picker = $(this).data('DateTimePicker');
    const currentDate = e.date.clone();
    const prevDate = $(this).data('prevDate');
    
    if (!prevDate) return;
    
    // 判断操作类型:增加或减少
    const isIncrement = currentDate.isAfter(prevDate);
    let totalMinutes = prevDate.hours() * 60 + prevDate.minutes();
    
    // 调整总分钟数
    totalMinutes += isIncrement ? 45 : -45;
    
    // 计算正确的小时和分钟
    const newHours = Math.floor(totalMinutes / 60);
    const newMinutes = totalMinutes % 60;
    
    // 处理负数分钟(减少操作时可能出现)
    const correctedDate = prevDate.clone()
        .hours(newHours < 0 ? newHours + 24 : newHours)
        .minutes(newMinutes < 0 ? newMinutes + 60 : newMinutes);
    
    // 修正日期并更新保存的上一次日期
    picker.date(correctedDate);
    $(this).data('prevDate', correctedDate.clone());
});

解决方案2:升级插件版本

如果你用的是旧版的eonasdan-bootstrap-datetimepicker,这个步进计算的bug可能已经在新版本中修复。可以尝试更新到最新稳定版,看看是否能直接解决问题。

验证效果

设置完成后,测试时间序列会符合预期:

  • 12:00 → 12:45(正常)
  • 12:45 → 01:30(正确进位)
  • 01:30 → 02:15
  • 02:15 → 03:00
    以此类推,完全符合45分钟步进的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:06