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

如何制作基于总时长的jQuery时间滑块?修正范围显示异常

修复jQuery时间滑块的显示问题

我帮你排查了代码里的问题,主要有两个核心原因导致滑块显示的时间不对,下面是具体的修正方案:

问题1:分钟数计算错误

你把04:30和45:30转成分钟数时算错了:

  • 04:30 = 4小时×60 + 30分钟 = 270(不是258)
  • 45:30 = 45小时×60 +30分钟 = 2730(不是2718)
    这直接导致滑块的起始/结束范围偏移了12分钟,所以显示出04:18和45:18。

问题2:数字的length属性误用

代码里用hours1.length、minutes1.length来判断是否需要补0,但数字类型没有length属性,必须先转成字符串再判断长度,否则补0逻辑完全不生效。

修正后的完整代码

<div id="time-range">
  <p>Time Range: <span class="slider-time">04:30</span> - <span class="slider-time2">45:30</span></p>
  <div class="sliders_step1">
    <div id="slider-range"></div>
  </div>
</div>

<script>
$("#slider-range").slider({
  range: true,
  min: 270,  /* 04:30 正确的分钟数 */
  max: 2730, /* 45:30 正确的分钟数 */
  step: 15,
  values: [270, 2730],
  slide: function (e, ui) {
    // 处理起始时间
    var totalMinutes1 = ui.values[0];
    var hours1 = Math.floor(totalMinutes1 / 60);
    var minutes1 = totalMinutes1 % 60;
    // 转成字符串后补0
    hours1 = hours1.toString().padStart(2, '0');
    minutes1 = minutes1.toString().padStart(2, '0');
    $('.slider-time').html(`${hours1}:${minutes1}`);

    // 处理结束时间
    var totalMinutes2 = ui.values[1];
    var hours2 = Math.floor(totalMinutes2 / 60);
    var minutes2 = totalMinutes2 % 60;
    hours2 = hours2.toString().padStart(2, '0');
    minutes2 = minutes2.toString().padStart(2, '0');
    $('.slider-time2').html(`${hours2}:${minutes2}`);
  }
});
</script>

额外优化说明

我把原来的minutes = total - (hours*60)改成了minutes = total % 60,这样计算分钟数更简洁直观;同时用padStart(2, '0')来替代手动的if判断,代码更简洁易读,效果是一样的——自动给小于10的数字补前导0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:21:50