vue判断定时任务此刻是否在任务时间段内

934 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

1.什么是定时任务

定时任务是每天都需要重复执行的操作,比如新建一个垃圾清理的任务,每天5-7点调取监控画面。

因为是每天重复任务,因此不能使用时间戳判断,接口读取时间戳是新建任务当天的时间戳。不足以判断当前是否在任务时间断内

2.思路

抛弃日期,转化成时间来操作。将时间戳转化成秒来判断,这样可以省去判断时,然后分,然后秒的逻辑。

计算出来开始时间的距离0点0分0秒过了多少秒,技术时间距离0点0分0秒已经过了多少秒。 在拿到当前时间距离0点0分0秒已经过了多少秒。

1)当前时间的秒数>结束时间,证明任务已经结束

2)开始时间的秒数>结束时间的秒数,证明当前的任务是跨天的任务,比如前一天12点到第二天凌晨5点的任务。即在前一天此刻>=开始,后一天此刻<=结束,证明在任务时间范围内

3)不跨天的任务,开始<=此刻<=结束时间, 证明在任务时间范围内

3.解决

可以借用moment,dayjs这种第三方插件库来提升我们开发效率,文章使用moment来做时间转化

1.得到以秒计算的时间

getSeconds(val) {
  const h = moment(val).get('hours')
  const m = moment(val).get('minutes')
  const s = moment(val).get('seconds')
  return h * 3600 + m * 60 + s
}

此刻的时间:

const nowTime = this.getSeconds()   //此刻时间
const start_time = this.getSeconds(this.start_time * 1000)   //任务开始时间
const end_time = this.getSeconds(this.end_time * 1000)       //任务结束时间

if (nowTime >= end_time) {
          //任务结束
         this.taskStatus = true
 } else {
       if (this.start_time > this.end_time) { //跨天任务  
        //此刻>=开始时间,或者此刻<=结束时间
        //例如 23:00-5:00的任务,此时是1点或是23:30都是在任务之内
        //即在前一天此刻>=开始,后一天此刻<=结束
          this.status = nowTime >= start_time || nowTime <= end_time
       } else {    //不跨天
           //开始<=此刻<=结束时间
          this.status = start_time <= nowTime && nowTime <= end_time
       }
 }