element-ui使用el-date-picker日期组件常见场景

news/2024/10/2 3:15:29

开始

最近一直在使用 element-ui中的日期组件。
所以想对日期组件常用的做一个简单的总结;
1.处理日期组件选择的时候面板联动问题 
2.限制时间范围

解除两个日期面板之间的联动

我们发现2个日期面板之间其实是有联动关系的;
开始时间面板和结束时间面板始终只能相邻;
不能出现开始时间选择3月,结束时间是5月这样的情况;
但是我们有些时候要让他们之间解除联动关系;
我们需要将 unlink-panels 设置为true

unlink-panels:在范围选择器里取消两个日期面板之间的联动;
它默认是false;我们设置为true就行

限制-选择今天以及今天之后的时间

<template><div><el-date-pickerv-model="value2"type="datetimerange"range-separator="至":picker-options="pickerOptions"start-placeholder="开始日期"end-placeholder="结束日期"align="right"></el-date-picker></div>
</template>
<script>
export default {data() {return {pickerOptions: { disabledDate(time) {// time 表示的是面板中每一个日期值// 只能选择今天以及今天之后的时间return time.getTime() < Date.now() - 24*60*60*1000;}},value2: ''}}
}
</script>

8.64e7 约等于24小时

有的小伙伴说:我看见有些限制时间是这样写的
return time.getTime() < Date.now() - 8.64e7
其实8.64e7 约等于24小时;所以并不会影响

限制-只能选择今天之后的时间

pickerOptions: { disabledDate(time) {// 只能选择今天之后的时间// time 表示的是面板中每一个日期值return time.getTime() < Date.now()}
},

限制-选择今天以及今天之前的时间

pickerOptions: { disabledDate(time) {// 选择今天以及今天之前的时间// time 表示的是面板中每一个日期值return time.getTime()  > Date.now();}
},

限制-选择今天之前的时间

pickerOptions: { disabledDate(time) {// 选择今天之前的时间// time 表示的是面板中每一个日期值return time.getTime() > Date.now() -  24*60*60*1000;}
},

限制-选择当前时间以及当前之前的7天的时间

<el-date-pickerv-model="value2"type="datetimerange"range-separator="至":picker-options="pickerOptions"start-placeholder="开始日期"end-placeholder="结束日期"align="right">
</el-date-picker>data() {return {pickerOptions: {  disabledDate(time) {  // 获取当前的时间let currentTime = new Date()// 重新设置当前时间的 时,分,秒,毫秒currentTime.setHours(0,0,0,0)// 得到当前时间 0时0分0秒的时间戳let endTime = currentTime.getTime()// 获取7天前的时间戳let startTime = endTime - 6*24*60*60*1000// time表示需要需要禁用的时间return  time.getTime() < startTime || time.getTime() > endTime},  },value2: ''}}

限制-时间不能超过当前时间,时间跨度不能超过30天

经过前面我们的学习,我们可以通过
time.getTime()  > Date.now();
来限制时间不能超过当前时间;
时间跨度我们通过 change 事件来判断开始时间和结束时间是否相差30天
于是我们很快完成了功能
<template><div><el-date-pickerv-model="value2"type="datetimerange"@change="changeTime"range-separator="至":picker-options="pickerOptions"start-placeholder="开始日期"end-placeholder="结束日期"align="right"></el-date-picker></div>
</template>
<script>export default {data() {return {pickerOptions: {  disabledDate(time) {  // 选择今天以及今天之前的时间 return time.getTime()  > Date.now();},  },  value2: ''}},methods:{changeTime(time){if(time && time.length){let endTime = time[1].getTime()let startTime = time[0].getTime()let limitTime= 30 *24 *60*60*1000if(endTime - startTime > limitTime){this.$message.error('选择的时间不能超过30天');this.value2 = ''}}else {this.$message.error('请选择时间');}}}
}
</script>

发现问题

虽然我们上面的代码实现了功能;但是用户体验不是特别不好;
有没有这样的方式:当用户选择了5月2号;
只能选择它的前30天和后30天范围的时间(4月2号---6.20号)
如果要实现上面这样的功能:
1.我们要解决面板联动,可以使用 unlink-panels 来解决;
2.我们要知道用户点击选择的时间,这样我们才能知道开始和结束;这样问题我们可以使用 onPick: date => { }事件知道点击选中的时间
3.计算出30天前和30天后的时间

选择的时间范围不超过7天(为了好演示)

<template><div><el-date-picker v-model="myTime" unlink-panels type="datetimerange" range-separator="至":picker-options="pickerOptions" start-placeholder="开始日期" end-placeholder="结束日期" align="right"></el-date-picker></div>
</template>
<script>export default {data() {return {pickerOptions: {disabledDate: time => {// this.userSelectDate 可能是 '',不是一个日期对象;// 这个必须要使用括号哈 // 如果使用 !this.userSelectDate instanceof Date 仍然是falseif (!(this.userSelectDate instanceof Date)) {return false} else {let currentTime = time.getTime()let userSelectDateTime = this.userSelectDate.getTime()// 获取7天前的时间戳let day7beforeTime = userSelectDateTime - 6*24*60*60*1000// 获取7天后的时间戳let day7AfterTime = userSelectDateTime + 6*24*60*60*1000// 只能选择 7天前和7天后return currentTime > day7AfterTime || currentTime < day7beforeTime}},onPick: date => {// minDates就是用户选择的初始时间,记录它是为了得到7天前和7天后的时间console.log('用户选择时间就是触发', date)if (date.minDate) {// 记录用户选择的时间this.userSelectDate = date.minDate} else {this.userSelectDate = null}}},userSelectDate: '',myTime:''}}
}
</script>


又又发现了问题

上面虽然友好的实现了限制选择的时间前后不超过7天;
但是没有限制选择的时间【不能】选择今天之后的时间;
我们需要限制一下;
除了 pickerOptions 中的代码,其他的与上面的一样保持不变

选择的时间范围不超过7天,同时选择的时间不能选择今天之后的时间

pickerOptions: {disabledDate: time => {console.log(11111111111)// 限制不能选择今天之后的时间if( Date.now() < time.getTime()){return true;}else {// this.userSelectDate 可能是 '',不是一个日期对象;// 这个必须要使用括号哈 // 如果使用 !this.userSelectDate instanceof Date 仍然是falseif (!(this.userSelectDate instanceof Date)) {return false} else {let currentTime = time.getTime()let userSelectDateTime = this.userSelectDate.getTime()// 获取7天前的时间戳let day7beforeTime = userSelectDateTime - 6*24*60*60*1000// 获取7天后的时间戳let day7AfterTime = userSelectDateTime + 6*24*60*60*1000// 只能选择 7天前和7天后return currentTime > day7AfterTime || currentTime < day7beforeTime}}}
},


尾声

没有想到五一这么快就结束了;
用了2天时间看完了遮天;
主角是古今第一圣体,荒古圣体;
我是牛马圣体;不说了,开始干活

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

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

相关文章

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端(Terminal)来让用户登录, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6] 的组合按钮。其中 [Ctrl] + [Alt] + [F1] 为…

20211317李卓桐 Exp6 MSF攻防实践 实验报告

Exp6 MSF攻防实践 实践内容本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路。具体需要完成: 1.1一个主动攻击实践,尽量使用最新的类似漏洞; 1.2 一个针对浏览器的攻击,尽量使用最新的类似漏洞; 1.3 一个针对客户端的攻击,如Adobe或office,尽量使…

深入理解Django:中间件与信号处理的艺术

title: 深入理解Django:中间件与信号处理的艺术 date: 2024/5/9 18:41:21 updated: 2024/5/9 18:41:21 categories:后端开发tags:Django 中间件 信号 异步 性能 缓存 多语言引言 在当今的Web开发领域,Django以其强大的功能、简洁的代码结构和高度的可扩展性,已成为众多开发者…

零知识证明: Tornado Cash 项目学习

前言 最近在了解零知识证明方面的内容,这方面的内容确实不好入门也不好掌握,在了解了一些基础的概念以后,决定选择一个应用了零知识证明的项目来进行进一步的学习。最终选择了 Tornado Cash 这个项目,因为它著名且精致,适合入门的同学进行学习。 学习 Tornado Cash 项目,…

高并发秒杀项目随手笔记

1 数据库基字符集为什么选择utf8mb4? 2 在 MyBatis 中,JavaBean 属性名和数据库字段名的映射非常关键,正确设置这一映射是保证数据正确封装到 JavaBean 中的前提。以下是 MyBatis 映射机制的详细解释: 1. 默认映射行为 如果在 MyBatis 的 <resultMap> 中没有明确指定…

创建数据库

#数据库的操作 #删除数据库指令 DROP DATABASE hsp_db01;#hsp_db01这个对应的是数据 #用指令创建数据库 CREATE DATABASE hsp_db01; #创建一个使用utf8字符集的hsp_db02数据库 CREATE DATABASE hsp_db02 CHARACTER SET utf8 #创建一个使用utf8字符集,并带校队规则的hsp_db03数…

前后端数据交互形式随手笔记

注解@RequestParam Map<String, String> params 的使用1 在Spring MVC中,使用@RequestParam Map<String, String> params可以接收前端发出的请求参数并将它们作为一个Map收集起来。这种方式非常灵活,可以处理来自前端的各种数据提交形式。以下是一些常见的前端数…