如何获取时间段内所有符合条件的数据?

作者站长头像
站长
· 阅读数 21

现有两个查询条件,其中一个是日期时间。ui

 <el-form :inline="true" :model="formInline">
        <el-form-item label="工位号" style="font-weight: bold">
          <el-select v-model="formInline.value" placeholder="请选择工位">
            <el-option
              v-for="item in options"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="起始时间-截止时间" style="font-weight: bold">
          <el-date-picker
            v-model="formInline.value1"
            type="datetimerange"
            range-separator="-"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          >
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="search(formInline)">查询</el-button>
        </el-form-item>
      </el-form>
 // search点击事件
    search (val) {
      console.log('输入值', val)
      const datetime01 = this.toDate(val.value1[0]).date + ' ' + this.toDate(val.value1[0]).time
      const datetime02 = this.toDate(val.value1[1]).date + ' ' + this.toDate(val.value1[1]).time
      console.log(datetime01, '处理好的语义化时间', datetime02)
      const data = this.allData
      console.log(data, '所有数据')
      if (val.value === '') {
        this.$message.error('请选择想要查询的工位!')
        return
      }
      if (val.value1[0] === '') {
        this.$message.error('请输入起始时间!')
        return
      }
      if (val.value1[1] === '') {
        this.$message.error('请输入截止时间!')
        return
      }
      if (val.value && val.value1[0] && val.value1[1]) {
        /**
         *  循环遍历出 符合条件的数组数据
         *  工位process_no 时间do_time
         *  将日期内的所有数据匹配出来
         *
         * 先过滤出所有符合工站位的数据,再匹配出时间段内的数据
         */
        const match = data.filter(item => (item.process_no = val.value))
        console.log(match, '匹配上的工位')
      }

      this.getAllData()
    },
回复
1个回答
avatar
test
2024-06-26
//... 之前的代码 ...

if (val.value && val.value1[0] && val.value1[1]) {
    /**
     *  循环遍历出 符合条件的数组数据
     *  工位process_no 时间do_time
     *  将日期内的所有数据匹配出来
     *
     * 先过滤出所有符合工站位的数据,再匹配出时间段内的数据
     */
    const startTime = new Date(datetime01).getTime();
    const endTime = new Date(datetime02).getTime();

    const match = data.filter(item => 
        item.process_no === val.value &&
        new Date(item.do_time).getTime() >= startTime && 
        new Date(item.do_time).getTime() <= endTime
    );
    console.log(match, '匹配上的数据');
}

//... 之后的代码 ...
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容