elementUI,vue,前端判断时间是否有交集(重合)方法

news2024/9/23 2:20:08

在这里插入图片描述

分成三个部分

    • html
    • ※ 具体实现方法
    • methods
      • 帮助理解逻辑图:![@smallredBook:灵魂画手,业余爱好支持支持](https://i-blog.csdnimg.cn/direct/665950ee60964ef8912ce4f1a98dcc0e.jpeg#pic_center)
    • 简化:由上面的逻辑反推[^1]

html

<template>
	<el-form ref="Froms" :model="formData" :rules="rules" label-width="100px" size="small">
		<el-form-item label="日售卖区间:" prop="saleDayTime">
			<div style="border: 1px solid #DCDFE6; padding: 5px 0px 0px 5px; border-radius: 5px; margin-bottom: 5px;" v-if="this.formData.saleDayTime && this.formData.saleDayTime.length > 0">
				<el-tag v-for="(item,index) in formData.saleDayTime" :key="index" closable @close="handleClose(index)" style="margin-right: 5px; margin-bottom: 5px;">
					{{item}}
				</el-tag>
			</div>
			<el-time-picker v-model="tempTimeStart" :picker-options="{selectableRange: `00:00:00 -${tempTimeEnd ? tempTimeEnd : '23:59:59'}`}" placeholder="选择时间" value-format="HH:mm:ss" style="width: 120px;"></el-time-picker>
			<el-time-picker v-model="tempTimeEnd" :picker-options="{ selectableRange: `${tempTimeStart ? tempTimeStart : '00:00:00'} - 23:59:59`}"placeholder="选择时间" value-format="HH:mm:ss" style="width: 120px;"></el-time-picker>
			<el-button size="small" @click="addTime" type="primary" style="margin-left: 10px;">
				新增可用时间段
			</el-button>
		</el-form-item>
	</el-form>
</template>

※ 具体实现方法

<script>
export default {
	// 判断时间是否有交集方法
	const checkSaleDay = (rule, value, callback) => {
		// console.log(value) // 时间格式: ['10:56:58-13:56:59']
		let arrOne = [];
		value.forEach((item) => {
			  let arr1 = item.split('-');
			  // 注:“24小时制”时间,将“时”、“分”、“秒”,位上的时间以字符串形式进行拼接,拼接之后的数字时间越晚的数字会越大
		      let startTime = arr1[0].split(':')[0] + arr1[0].split(':')[1] + arr1[0].split(':')[2]; // "10"+"56"+"58", 以字符串形式拼接
		      let endTime = arr1[1].split(':')[0] + arr1[1].split(':')[1] + arr1[1].split(':')[2]; // "13"+"56"+"59", 以字符串形式拼接
		      arrOne.push({
	         	start: startTime,
	          	end: endTime
	        });
		});
		var len = arrOne.length;
		// console.log(arrOne)
		let satisfied = true;
		for (var i = 0; i < len; i++) {
			for (var j = i + 1; j < len; j++) {
				let start1 = arrOne[i].start;
		        let start2 = arrOne[j].start;
		        let end1 = arrOne[i].end;
		        let end2 = arrOne[j].end;
		        if (start1 < start2 && start2 < end1) { // 例:start1=3,end1=6;start2=5,end2=10
		           satisfied = false;
		        } else if (start1 > start2 && end2 > start1) { // 例:start1=3,end1=6;start2=2,end2=5
	               satisfied = false;
	            } else if (start1 > start2 && end1 < end2) { // 例:start1=3,end1=6;start2=2,end2=10
	               satisfied = false;
	           }  else if (start1 < start2 && end1 > end2) { // 例:start1=3,end1=6;start2=4,end2=5
	               satisfied = false;
	           }
			}
		}
		if (satisfied) {
	        callback();
	    } else {
	        callback(new Error('售卖区间产生存在交集,请确认后重选'));
	    }
	}
	data() {
		return{
			tempTimeStart: '', // 所选开始时间回显
      		tempTimeEnd: '', // 所选结束时间回显
			formData:{
				saleDayTime: [],
			},
			rules: {
				saleDayTime: [{
		          required: true,
		          message: '请选择日售卖区间',
		          trigger: 'change'
		        },{
		          required: true,
		          validator: checkSaleDay,
		          trigger: 'change'
		        }]
			}
		}
	},
}
<script>

methods

<script>
	export default {
		methods:{
			// 删除所选时间
			handleClose(index) {
		       this.formData.saleDayTime.splice(index, 1);
		    },
			// 新增可用时间段
			addTime() {
			   if (!this.tempTimeStart || !this.tempTimeEnd) {
			      return;
			   }
			   if (!this.formData.saleDayTime) {
			      this.formData.saleDayTime = [];
			   }
			   // 把选择的时间加入数组里
			   this.formData.saleDayTime.push(this.tempTimeStart + '-' + this.tempTimeEnd);
			   // 加入成功后清空回显值
			   this.tempTimeStart = '';
			   this.tempTimeEnd = '';
			}
		}
	}
<script>

帮助理解逻辑图:@smallredBook:灵魂画手,业余爱好支持支持

简化:由上面的逻辑反推1

<script>
export default {
	// 判断时间是否有交集方法
	const checkSaleDay = (rule, value, callback) => {
		// console.log(value) // 时间格式: ['10:56:58-13:56:59']
		let arrOne = [];
		value.forEach((item) => {
			  let arr1 = item.split('-');
			  // 注:“24小时制”时间,将“时”、“分”、“秒”,位上的时间以字符串形式进行拼接,拼接之后的数字时间越晚的数字会越大
		      let startTime = arr1[0].split(':')[0] + arr1[0].split(':')[1] + arr1[0].split(':')[2]; // "10"+"56"+"58", 以字符串形式拼接
		      let endTime = arr1[1].split(':')[0] + arr1[1].split(':')[1] + arr1[1].split(':')[2]; // "13"+"56"+"59", 以字符串形式拼接
		      arrOne.push({
	         	start: startTime,
	          	end: endTime
	        });
		});
		var len = arrOne.length;
		// console.log(arrOne)
		let satisfied = false; // 注意这时候这里的变量值为false了哦
		for (var i = 0; i < len; i++) {
			for (var j = i + 1; j < len; j++) {
				let start1 = arrOne[i].start;
		        let start2 = arrOne[j].start;
		        let end1 = arrOne[i].end;
		        let end2 = arrOne[j].end;
		        if (end1 < start2 || start1 < end2) { // 例:start1=3,end1=6;start2=7,end2=10;start1=3,end1=6;start2=1,end2=2
		           satisfied = true;
		        }
			}
		}
		if (satisfied) {
	        callback();
	    } else {
	        callback(new Error('售卖区间产生存在交集,请确认后重选'));
	    }
	}
}
<script>

  1. 反推思维逻辑图:
    smallredBook:灵魂画手,业余爱好支持支持 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

与OpenAI合作:期待已久的苹果AI战略

探讨 Apple 和 OpenAI 合作的AI战略 ©作者|CodeDan 来源|神州问学 一&#xff0e;引言 在当今科技发展日新月异的背景下&#xff0c;大型科技公司的合作与联盟日益成为关注焦点。在最近的2024苹果全球开发者大会上&#xff0c;苹果展示了最新苹果系统上搭载的大模型应用…

.net 7和core版 SignalR

.net 7和core版 SignalR代码示例(手把手一起认识Websocket、SignalR) # 白话讲解 刚听到Websocket、SignalR有没有很迷茫,一脸懵逼的那种有没有,都是通信,这俩有什么区别,都是怎么实现的,什么时候该用哪一个, 苦于Websocket、SignalR久已,今天必须整出个一二三来,…

UWA Gears使用指南:轻松掌握应用性能优化

UWA最新发布了无SDK性能分析工具 - UWA Gears。该工具能够实时监测应用的CPU和GPU性能&#xff0c;无需代码改动即可掌握性能动态。此外&#xff0c;Gears还能截取应用的渲染画面进行深度分析&#xff0c;帮助您快速找到性能瓶颈并进行精准优化。 本文为您提供快速上手UWA Gea…

SpringMVC源码解析(二):请求执行流程

SpringMVC源码系列文章 SpringMVC源码解析(一)&#xff1a;web容器启动流程 SpringMVC源码解析(二)&#xff1a;请求执行流程 目录 前言DispatcherServlet入口一、获取HandlerExcutionChain(包括Handler)1、获取Handler1.1、通过request获取查找路径1.2、通过查找路径获取Han…

昂贵的质量 —— 为什么bug总在发生?

“To err is human” 在过去相当长一段时间内&#xff0c;我都在一个负责项目维护的团队内工作。团队的特殊之处在于&#xff0c;我们从来不开发新功能&#xff0c;而是负责解决每天上报的线上问题。这些 bug 无奇不有&#xff0c;从无法打开页面到数据奇怪丢失&#xff0c;麻…

关于伦敦金出金时间 你需要了解这些

​在伦敦金交易中&#xff0c;有很多基础因素是投资者在交易之前就需要了解的&#xff0c;其中就有伦敦金出金时间的问题。不过我们需要注意的是&#xff0c;伦敦金出金时间可能会有多种不同的含义&#xff0c;下面我们就这个问题进行一下讨论。 首先&#xff0c;伦敦金出金时间…

软件测试必备技能

在软件测试领域&#xff0c;以下是一些必备的技能和能力&#xff0c;可以帮助你成为一名优秀的软件测试工程师&#xff1a; 1. 测试基础知识&#xff1a; 熟悉软件测试的基本概念、原则和流程&#xff0c;包括不同类型的测试&#xff08;如单元测试、集成测试、系统测试&#…

局部路径规划论文汇总

文章目录 2021MRPB 1.0: A Unified Benchmark for the Evaluation of Mobile Robot Local Planning Approaches 2021 MRPB 1.0: A Unified Benchmark for the Evaluation of Mobile Robot Local Planning Approaches code: https://github.com/NKU-MobFly-Robotics/local-pla…

无人配送,成不了美团的“萝卜快跑”

文&#xff1a;互联网江湖 作者&#xff1a;刘致呈 萝卜快跑在武汉秀了秀肌肉&#xff0c;惊艳了四座。无人驾驶概念股&#xff0c;也在资本市场掀起了不小的轰动。萝卜快跑之所以能闹起来这么大动静&#xff0c;核心在于&#xff0c;萝卜快跑这个自变量一变&#xff0c;会导致…

昇思25天学习打卡营第XX天|CycleGAN图像风格迁移互换

CycleGAN是一种用于图像到图像翻译的生成对抗网络&#xff0c;它突破了传统域迁移模型的限制&#xff0c;无需成对样本即可学习图像在不同域间的转换。这种无监督的方法特别适用于难以获取配对数据的场景&#xff0c;例如艺术风格迁移。与需要成对训练样本的Pix2Pix不同&#x…

探索思维导图软件:让你的工作与学习更高效

思维导图怎么做&#xff1f;作为策划界的老司机&#xff0c;我手里头可没少试过这些提升效率的神器。今儿&#xff0c;我就从亲身体验出发&#xff0c;给大家聊聊福昕思维导图、博思白板思维导图和知犀思维导图在咱们创建方案时的那些“独门绝技”。 一、福昕思维导图 网址&a…

拓客新动力:揭秘拓客工具的三大优势,让业务增长不再难!

现如今&#xff0c;有效的客户拓展工具已成为提升业务增长的关键。拓客工具的出现&#xff0c;能够实现更高效的营销和客户管理。 下面&#xff0c;就和大家聊聊拓客工具的三大优势&#xff0c;使业务增长不再成为难题。 1、提高营销效率 这些工具通常集成了数据分析、活动管…

闻味寻瓜部落+解压舔狗式聊天机器人:你说行不行?

大家好&#xff0c;我是一名_全栈_测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家关注我&#xff0c;和我一起【分享测试知识&#xff0c;交流测试技术&#xff0c;趣聊行业热点】。 ---- 首先 ---- 非常感谢您的关注 我将…

最小例程上加OLED显示

最小例程上加OLED显示 本工程代码链接: https://ww0.lanzoul.com/i8lNa265gj7g 失效联系:qq2958360390 我们其实就加上这几个文件, 然后会调用就可以了, 具体的就看江协科技的OLED, 讲的很清楚, 我们这里只说应用, 我们的重点在使用. 下面跟着我来, 复制黏贴: 更详细请看哔哩…

黑马程序员大事件springboot3+vue3

以下内容都是本人在听课时整理的&#xff0c;不是黑马官方的教程 环境搭建 准备数据表 -- 创建数据库 create database big_event;-- 使用数据库 use big_event;-- 用户表 create table user (id int unsigned primary key auto_increment comment ID,username varchar(20) no…

iview的表格更新表头保持排序字段状态、手动重置排序字段状态

前提&#xff1a;vue2、view-design 4.7.0 问题&#xff1a;要实现通过切换不同的选项&#xff0c;表格可能新增或删除某几个字段列&#xff0c;除了这几个字段不可排序&#xff0c;其他字段皆可切换排序。实现后发现&#xff0c;重新渲染表头后原本排序的表头字段没有高亮排序…

【C++】VS-code 报错error C2001: 常量中有换行符(已解决,图文分享)

目录 0.环境 1.简介 2.有效的解决办法 3.尝试过但无效的方法 1&#xff09;在终端设置utf-8语言 2&#xff09;用Notepad 修改编码 3&#xff09;在vs-code中&#xff0c;修改编码规则&#xff0c;使用【Reopen with Encoding】 0.环境 windows11 VS-code c 1.简介 一…

使用Teleport实现视频小窗口播放

效果 实现步骤 小视频窗口 <!-- 小视频窗口 --><divid"fixbox"style"width: 300px;height: 300px;position: fixed;right: 20px;bottom: 20px;"></div> 占位元素 <!-- 被监听出入视口的占位元素 --><div id"box"…

token响应

程序拿着帐密到数据库检查&#xff0c;结果为true就证明登录成功&#xff0c;则需要返回token 设置token的返回值&#xff0c;可以直接调用&#xff0c;也会显得很高级 新建类resultToken-将定义属性冰将之前定义的data改为token 构造方法里也是把入参改为string token 最…

mail发送API的邮件安全性设置有哪些要点?

mail发送API的可靠性如何测试&#xff1f;API接口性能优化策略&#xff1f; 在当今数字化时代&#xff0c;邮件成为了个人和企业之间最重要的通信手段之一。为了保证邮件的安全性&#xff0c;mail发送API的正确配置显得尤为重要。AokSend将详细探讨mail发送API的安全性设置要点…