首页 > 其他分享 >js判断2个时间段是否有重叠(时分)

js判断2个时间段是否有重叠(时分)

时间:2024-01-10 14:35:24浏览次数:23  
标签:重叠 arrA ++ eA js dataForm let 时间段 arrB

原理:1天1440分钟,每个时间段都有对应的数值,生成2个数组,判断数组中是否有重叠数字

isTimeOverlap(startA, endA, startB, endB) {
      if (!startA || !endA || !startB || !endB) return false
      let sA = this.dealTime(startA);
          let sB = this.dealTime(startB);
          let eA = this.dealTime(endA);
          let eB = this.dealTime(endB)
      //不是时间段
      if (sA === eA || sB === eB) return true

      let isOverlap = false

      let arrA = [] // 第一个时间段的区间
      if (sA < eA) {
        for (let i = sA; i < eA; i++) {
          arrA.push(i)
        }
      } else {
        for (let i = sA; i < 1440; i++) {
          arrA.push(i)
        }
        for (let i = 0; i < eA; i++) {
          arrA.push(i)
        }
      }
      let arrB = [] // 第2个时间段的区间
      if (sB < eB) {
        for (let i = sB; i < eB; i++) {
          arrB.push(i)
        }
      } else {
        for (let i = sB; i < 1440; i++) {
          arrB.push(i)
        }
        for (let i = 0; i < eB; i++) {
          arrB.push(i)
        }
      }
      for (let i = 0; i < arrA.length; i++) {
        let h = arrB.findIndex((item) => { return item === arrA[i] })
        if (h !== -1)isOverlap = true
      }

     //console.log(sA, sB, eA, eB, JSON.stringify(arrA),'\n', JSON.stringify(arrB))
      return isOverlap;
    },
    dealTime(time) {
      let t = time.split(":")
      return parseInt(t[0]) * 60 + parseInt(t[1])
    },

  调用:

      this.dataForm.dayModeTime1 = '14:00'
      this.dataForm.dayModeTime2 = '22:00'

      this.dataForm.nightModeTime1 = '22:00'
      this.dataForm.nightModeTime2 = '12:00'

     this.isTimeOverlap(this.dataForm.dayModeTime1, this.dataForm.dayModeTime2, this.dataForm.nightModeTime1, this.dataForm.nightModeTime2)

    

  

标签:重叠,arrA,++,eA,js,dataForm,let,时间段,arrB
From: https://www.cnblogs.com/pangchunlei/p/17956406

相关文章

  • Next.js 开发指南 路由篇 | 动态路由、路由组、平行路由和拦截路由
     前言实际项目开发的时候,有的路由场景会比较复杂,比如数据库里的文章有很多,我们不可能一一去定义路由,此时该怎么办?组织代码的时候,有的路由是用于移动端,有的路由是用于PC端,该如何组织?如何有条件的渲染页面,比如未授权的时候显示登录框?如何让同一个路由根据情况不同展示不同的内......
  • 使用nestjs和react快速搭建项目架子
    首先搭建前后端的项目架子搭建nestjs架子npx@nestjs/clinew项目名使用vite搭建一个react+ts的架子,vite地址:https://cn.vitejs.dev/guide/。搭建好后cd到项目中,然后安装依赖,尝试启动。npmcreatevite@latest项目名----templatereact-ts数据库使用postgresql,使用do......
  • HTML+CSS+JS 实现苹果手表表盘
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>仿苹果手表表盘</title><......
  • js判断字符串为纯ASCII字符串(仅有ASCI字符)
    functionisAscii(str){varpattern=/^[\x00-\x7F]+$/;//ASCII范围的Unicode编码returnpattern.test(str);}varstr1="Hello,_-";console.log(isAscii(str1));//truevarstr2="hello你好";console.log(isAscii(str2));//false......
  • js 静态分配与对象池
    为了提升JavaScript性能,最后要考虑的一点往往就是压榨浏览器了。此时,一个关键问题就是如13何减少浏览器执行垃圾回收的次数。开发者无法直接控制什么时候开始收集垃圾,但可以间接控制触发垃圾回收的条件。理论上,如果能够合理使用分配的内存,同时避免多余的垃圾回收,那就可以保住因......
  • js 垃圾回收
    两个实例基本上就一样了(不考虑hasOwnProperty的返回值),因此可以共享一个隐藏类,从而带来潜在的性能提升。不过要记住,使用delete关键字会导致生成相同的隐藏类片段。看一下这个例子:functionArticle(){this.title='InaugurationCeremonyFeaturesKazooBand';......
  • js性能
    垃圾回收程序会周期性运行,如果内存中分配了很多变量,则可能造成性能损失,因此垃圾回收的时间调度很重要。尤其是在内存有限的移动设备上,垃圾回收有可能会明显拖慢渲染的速度和帧速率。开发者不知道什么时候运行时会收集垃圾,因此最好的办法是在写代码时就要做到:无论什么时候开始收......
  • js垃圾回收
    JavaScript是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存。在C和C++等语言中,跟踪内存使用对开发者来说是个很大的负担,也是很多问题的来源。JavaScript为开发者卸下了这个负担,通过自动内存管理实现内存分配和闲置资源回收。基本思路很简单:确定哪个变量不会......
  • js 常量
    除了let,ES6同时还增加了const关键字。使用const声明的变量必须同时初始化为某个值。一经声明,在其生命周期的任何时候都不能再重新赋予新值。consta;//SyntaxError:常量声明时没有初始化constb=3;console.log(b);//3b=4;//TypeError:给常量赋值const除了......
  • js变量声明
    var声明会被拿到函数或全局作用域的顶部,位于作用域中所有代码之前。这个现象叫作“提升”3(hoisting)。提升让同一作用域中的代码不必考虑变量是否已经声明就可以直接使用。在实践中,提升也会导致合法却奇怪的现象,即在变量声明之前使用变量。下面的例子展示了在全局作用域中两段......