处理24小时的每一分钟

/**
 * @param {Array} list 数据源
 * @param {String} key key 默认minute
 * @param {Number} num 用来分割时间 默认 是5
 *
 *
 * @param {Number} step 用来计算几个间隔 默认 是 1 也就是  "00:00"  "00:01" "00:02" .....
 * @return {Array} 返回一个数组
 * */
fn(
  list = [
    {
      day: '2022-08-15',
      minute: '18:29',
      vieweers: 31
    },
    {
      day: '2022-08-15',
      minute: '19:59',
      vieweers: 32
    }
  ],
  step = 1,
  num = 5,
  key = 'minute'
) {
  const timeSlot = step => {
    //  step = 间隔的分钟
    var date = new Date()
    date.setHours('00') // 时分秒设置从零点开始
    date.setSeconds('00')
    date.setUTCMinutes('00')
    var arr = [],
      timeArr = []
    var slotNum = (24 * 60) / step // 算出多少个间隔
    for (var f = 0; f < slotNum; f++) {
      var time = new Date(Number(date.getTime()) + Number(step * 60 * 1000 * f)) // 获取:零点的时间 + 每次递增的时间
      var hour = '',
        sec = ''
      time.getHours() < 10 ? (hour = '0' + time.getHours()) : (hour = time.getHours()) // 获取小时
      time.getMinutes() < 10 ? (sec = '0' + time.getMinutes()) : (sec = time.getMinutes()) // 获取分钟
      timeArr.push({ [key]: hour + ':' + sec }) //最终返回的数据
    }
    return timeArr
  }
  timeSlot(step).map((it, ix) => {
    it.index = ix //将每一分钟 添加下标 用于排序
    let obj = list.find(items => items[key] === it[key]) //将后端的数据 在 timeSlot()方法返回的数据进行匹配 匹配到了 给他们 添加timeSlot()对应的下标
    if (obj) {
      obj.index = ix
    } else {
      // if (!list.some(items => items.minute === it.minute)) {
      list.push({
        ...it,
        vieweers: 0
      })
    }
    // }
  })
  let c = list.slice().sort((aa, bb) => aa.index - bb.index) //在通过 index 排序
  const productData = []
  const b = Math.ceil(c.length / num)
  for (let i = 0; i < b; i++) {
    productData.push({
      total: c.slice(i * num, i * num + num).reduce((acc, cur) => acc + cur.vieweers, 0), //计算五分钟 他们的总数是多少
      fiveMinute: c.slice(i * num, i * num + num)[0][key],
      [key]: c.slice(i * num, i * num + num)
    })
  }
  return productData
},
    let bb = this.fn()
    console.log(bb)
// 自己打印预览返回的数据
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值