js 验证时间段是否重叠,加上星期验证

需求: 餐饮类营业时间,创建多组带星期的时间段,且同一星期不能出现重叠时间段,在保存时间段时就要进行判断。

要达到的效果(微盟的餐饮设置):
在这里插入图片描述
在这里插入图片描述
基本的思路也是用开始时间和结束时间进行比较。把当天的开始时间,结束时间分别存进两个数组,sort排序,循环遍历,从开始时间的第二个元素去比较结束时间的第一个元素,如果小于,就代表时间段有交叉,直接跳出,不然就继续遍历,遍历结束,说明时间没有重复,可以保存

实现:

//星期格式如下
weekDate: [
        { id: '0', label: '周日' },
        { id: '1', label: '周一' },
        { id: '2', label: '周二' },
        { id: '3', label: '周三' },
        { id: '4', label: '周四' },
        { id: '5', label: '周五' },
        { id: '6', label: '周六' }, ],
//item为新创建的一组时间段
submit (item) {
	let len = this.requestParams
	//首先循环星期,让每一天的数据单独验证
	for (let x = 0; x < this.weekDate.length; x++) {
		let startTimeArr = []
		let endTimeArr = []
		let timeStrat = ''
		let timeEnd = ''
		//再循环已有的几组数据
		 for (let i = 0; i < len.length; i++) {
	 		//第三次循环某组数据下有几个时间段
			 for (let a = 0; a < len[i].time_ranges.length; a++) {
		 		//最后循环某时间段下选择了几个星期
       			for (let y = 0; y < len[i].time_ranges[a].weeks.length; y++) {
       			 	//若选择的星期在该次星期循环中,则push到判断数组
           			if (len[i].time_ranges[a].weeks[y] === this.weekDate[x].id) {
		                timeStrat = len[i].time_ranges[a].start_time
		                timeEnd = len[i].time_ranges[a].end_time
		                startTimeArr.push(timeStrat)
		                endTimeArr.push(timeEnd)
		              }
		            }
		          }
		        }
	     	//将创建的时间段再添加到上面的数组中
	        for (let j = 0; j < item.time_ranges.length; j++) {
	          for (let z = 0; z < item.time_ranges[j].weeks.length; z++) {
	            if (item.time_ranges[j].weeks[z] === this.weekDate[x].id) {
	              timeStrat = item.time_ranges[j].start_time
	              timeEnd = item.time_ranges[j].end_time
	              startTimeArr.push(timeStrat)
	              endTimeArr.push(timeEnd)
		           }
		          }
		        }
	        //进行sort排序
	        let begin = startTimeArr.sort()
	        let over = endTimeArr.sort()
	        for (var k = 1; k < begin.length; k++) {
	          if (begin[k] <= over[k - 1]) {
	            this.$message.error("时间段存在重叠!")
	            throw "时间段存在重叠!"
	          }
	        }
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值