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

如何按用户自定义时间间隔移除时间列表中的时段

实现自定义时间间隔的时段筛选逻辑

现有前端代码

<div class="wrap_time">
    <h4>Time Interval added by user (in minutes)</h4>
    <input type="text" id="interval" value="90"/>
</div>

<p>Input converted to hour: <span class="convHour">0</span>:<span class="convMin">0</span></p>

<ul class="time_slot">
<li><span class="times">08:00</span></li>
<li><span class="times">08:15</span></li>
<li><span class="times">08:30</span></li>
<li><span class="times">08:45</span></li>
<li><span class="times">09:00</span></li>
<li><span class="times">09:15</span></li>
<li><span class="times">09:30</span></li>
<li><span class="times">09:45</span></li>
<li><span class="times">10:00</span></li>
<li><span class="times">10:15</span></li>
<li><span class="times">10:30</span></li>
<li><span class="times">10:45</span></li>
<li><span class="times">11:00</span></li>
</ul>

需求说明

需要实现按用户输入的分钟间隔,筛选时间列表中的时段:

  • 保留列表首个可用时段
  • 移除该时段后,用户设定间隔内的所有时段
  • 重复上述逻辑,直到遍历完所有时段

示例:当输入90分钟间隔时,处理后的时间列表应为:

<ul class="time_slot">
<li><span class="times">08:00</span></li> 
<li><span class="times">09:30</span></li>
<li><span class="times">11:00</span></li>
</ul>

解决方案

可以通过以下步骤实现:

1. 时间转换工具函数

先把HH:MM格式的时间字符串转换成总分钟数,方便后续计算时间差:

function timeToMinutes(timeStr) {
  const [hours, minutes] = timeStr.split(':').map(Number);
  return hours * 60 + minutes;
}

2. 核心筛选逻辑

编写函数,根据间隔筛选出需要保留的时段:

function filterTimeSlots(intervalMinutes) {
  const timeList = Array.from(document.querySelectorAll('.time_slot .times')).map(el => el.textContent);
  const filtered = [];
  if (timeList.length === 0) return filtered;

  // 保留第一个时段
  let lastKeptTime = timeToMinutes(timeList[0]);
  filtered.push(timeList[0]);

  // 遍历剩余时段
  for (let i = 1; i < timeList.length; i++) {
    const currentTime = timeToMinutes(timeList[i]);
    // 当前时间与上一个保留时间的差 >= 设定间隔,就保留
    if (currentTime - lastKeptTime >= intervalMinutes) {
      filtered.push(timeList[i]);
      lastKeptTime = currentTime;
    }
  }
  return filtered;
}

3. 更新DOM列表

编写函数,将筛选后的时段重新渲染到页面:

function updateTimeSlots() {
  const intervalInput = document.getElementById('interval');
  const intervalMinutes = parseInt(intervalInput.value) || 0;
  if (intervalMinutes <= 0) return; // 处理无效输入

  const filteredTimes = filterTimeSlots(intervalMinutes);
  const timeSlotUl = document.querySelector('.time_slot');
  
  // 清空原有列表
  timeSlotUl.innerHTML = '';
  
  // 添加筛选后的时段
  filteredTimes.forEach(time => {
    const li = document.createElement('li');
    li.innerHTML = `<span class="times">${time}</span>`;
    timeSlotUl.appendChild(li);
  });
}

4. 绑定事件监听

给输入框添加事件,实时响应用户输入:

// 页面加载时先执行一次,初始化列表
document.addEventListener('DOMContentLoaded', () => {
  updateTimeSlots();
  
  // 监听输入框变化
  const intervalInput = document.getElementById('interval');
  intervalInput.addEventListener('input', updateTimeSlots);
  intervalInput.addEventListener('change', updateTimeSlots);
});

补充说明

  • 代码兼容输入框的实时输入和失焦变化,用户修改间隔后会自动更新列表
  • 加入了无效输入判断(比如非数字、小于等于0的间隔),避免出错
  • 逻辑严格遵循需求:从第一个时段开始,每次保留间隔外的下一个最早时段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:40:37