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

JavaScript实现时间数组按当前时间排序,优先返回距离最近的时间

实现思路
  • 先把HH:mm:ss格式的时间字符串、当前时间都转换为从当天0点开始计算的总秒数,简化时间大小比较逻辑
  • 将待排序数组拆分为两组:小于等于当前时间的过去时间组pastArr、大于当前时间的未来时间组futureArr
  • pastArr按秒数降序排序,取排在首位的最大元素(即离当前时间最近的过去时间)作为结果第一个元素
  • 后续依次拼接升序排序的futureArr、以及反转后按升序排列的剩余pastArr元素即可
完整实现代码
// 辅助工具:将HH:mm:ss格式时间转换为当天总秒数
function timeToSec(timeStr) {
  const [hours, minutes, seconds] = timeStr.split(':').map(Number)
  return hours * 3600 + minutes * 60 + seconds
}

function createTimeSort(currentTime, timeArray) {
  // 转换当前时间为当天总秒数
  const currentSec = currentTime.getHours() * 3600 + currentTime.getMinutes() * 60 + currentTime.getSeconds()
  // 给每个时间字符串绑定对应的秒数值
  const timeWithSec = timeArray.map(item => ({
    text: item,
    sec: timeToSec(item)
  }))
  // 拆分过去、未来两组并分别排序
  const pastArr = timeWithSec.filter(item => item.sec <= currentSec).sort((a, b) => b.sec - a.sec)
  const futureArr = timeWithSec.filter(item => item.sec > currentSec).sort((a, b) => a.sec - b.sec)

  const result = []
  if (pastArr.length) {
    // 最近的过去时间排首位
    result.push(pastArr[0].text)
    // 拼接未来时间(升序)
    result.push(...futureArr.map(item => item.text))
    // 拼接剩余过去时间(升序)
    result.push(...pastArr.slice(1).reverse().map(item => item.text))
  } else {
    // 没有过去时间时直接返回升序的未来时间
    result.push(...futureArr.map(item => item.text))
  }
  return result
}
测试验证
const data = ["06:30:00", "09:00:00", "11:30:00", "13:00:00", "14:30:00", "15:00:00", "17:30:00", "18:00:00"]

// 测试示例1:当前时间13:40
const current1 = new Date()
current1.setHours(13, 40, 0)
console.log(createTimeSort(current1, data))
// 输出:["13:00:00","14:30:00","15:00:00","17:30:00","18:00:00","06:30:00","09:00:00","11:30:00"]

// 测试示例2:当前时间17:50
const current2 = new Date()
current2.setHours(17, 50, 0)
console.log(createTimeSort(current2, data))
// 输出:["17:30:00","18:00:00","06:30:00","09:00:00","11:30:00","13:00:00","14:30:00","15:00:00"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 06:36:04