当前位置: 首页 > news >正文

vue3使用<el-date-picker分别设置开始时间和结束时间时,设置开始时间晚于当前时间,开始时间早于结束时间,结束时间晚于开始时间

vue3使用<el-date-picker分别设置开始时间和结束时间时,设置开始时间晚于当前时间,开始时间早于结束时间,结束时间晚于开始时间

为避免出现填写结束事件后再次修改开始时间,导致开始时间晚于结束时间,添加 @change=“handleChangeStartTime”
进一步进行时间校验

<el-date-pickerv-else-if="item.type === 'datetimestart'"v-model="state.ruleForm[item.key]"type="datetime"format="YYYY-MM-DD HH:mm:ss"time-format="HH:mm:ss"value-format="YYYY-MM-DD HH:mm:ss"v-bind="pickerOptions"placeholder="选择日期时间"@change="handleChangeStartTime"
>
</el-date-picker>
<el-date-pickerv-else-if="item.type === 'datetimeend'"v-model="state.ruleForm[item.key]"type="datetime"format="YYYY-MM-DD HH:mm:ss"time-format="HH:mm:ss"value-format="YYYY-MM-DD HH:mm:ss"v-bind="pickerOptionsEnd"placeholder="选择日期时间"
>
</el-date-picker>
const handleChangeStartTime = () => {const startTime = convertToTimestamp(state.ruleForm.planStartTime);const endTime = convertToTimestamp(state.ruleForm.planEndTime);if (startTime > endTime) {ElMessage.warning('计划开始时间晚于计划结束时间,请重新添加计划开始时间或计划结束时间');}};/*** 生成一个数组* @param start* @param end*/const makeRange = (start: number, end: number) => {const result: number[] = [];for (let i = start; i <= end; i++) {result.push(i);}return result;};/*** 限制今天之前的时间不能选择(小时)*/const disabledHours = () => {let newVal = new Date(state.ruleForm.planStartTime);if (newVal &&newVal.getFullYear() == new Date().getFullYear() &&newVal.getMonth() == new Date().getMonth() &&newVal.getDate() == new Date().getDate()) {//如果为今天,则限制当前时间前的时间不能选择。return makeRange(0, new Date().getHours());}};/*** 限制今天之前的时间不能选择(分钟)* @param hour*/const disabledMinutes = () => {let newVal = new Date(state.ruleForm.planStartTime);if (newVal &&newVal.getFullYear() == new Date().getFullYear() &&newVal.getMonth() == new Date().getMonth() &&newVal.getDate() == new Date().getDate() &&newVal.getHours() == new Date().getHours()) {//如果为今天,则限制当前时间前的时间不能选择。return makeRange(0, new Date().getMinutes() - 1);}};/*** 限制今天之前的时间不能选择的配置*/const pickerOptions = computed(() => {return {// 限制今天之前的日期不能选择disabledDate(time: any) {return time.getTime() < Date.now() - 8.64e7;},// 限制今天之前的小时不能选择disabledHours,// 限制今天之前的分钟不能选择disabledMinutes,};});// 结束时间const pickerOptionsEnd = computed(() => {return {// 限制开始时间之前的日期不能选择disabledDate(time: any) {return time.getTime() < convertToTimestamp(state.ruleForm.planStartTime) - 8.64e7;},// 限制开始时间之前的小时不能选择disabledHours() {let newVal = new Date(state.ruleForm.planEndTime);const time = state.ruleForm.planStartTime;if (newVal &&newVal.getFullYear() == new Date(time).getFullYear() &&newVal.getMonth() == new Date(time).getMonth() &&newVal.getDate() == new Date(time).getDate()) {//限制开始时间前的时间不能选择。return makeRange(0, new Date(time).getHours() - 1);}},// 限制开始时间之前的分钟不能选择disabledMinutes() {let newVal = new Date(state.ruleForm.planEndTime);const time = state.ruleForm.planStartTime;if (newVal &&newVal.getFullYear() == new Date(time).getFullYear() &&newVal.getMonth() == new Date(time).getMonth() &&newVal.getDate() == new Date(time).getDate() &&newVal.getHours() == new Date(time).getHours()) {//限制开始时间前的时间不能选择。return makeRange(0, new Date(time).getMinutes() - 1);}},disabledSeconds() {let newVal = new Date(state.ruleForm.planEndTime);const time = state.ruleForm.planStartTime;if (newVal &&newVal.getFullYear() == new Date(time).getFullYear() &&newVal.getMonth() == new Date(time).getMonth() &&newVal.getDate() == new Date(time).getDate() &&newVal.getHours() == new Date(time).getHours() &&newVal.getMinutes() == new Date(time).getMinutes()) {//限制开始时间前的时间不能选择。return makeRange(0, new Date(time).getSeconds());}// return makeRange(0, new Date(time).getSeconds() - 1);},};});/*** 将某个时间转化成时间戳* 时间格式:2019-05-20 00:00:00 或 2019年5月1日 00:00:00* 返回值:1556640000000,13位时间戳*/// 示例日期字符串格式:"2023-05-15 14:30:00"function convertToTimestamp(dateString: string) {// 处理iOS兼容性问题(将短横线替换为斜杠)const formattedDate = dateString.replace(/-/g, '/');const dateObj = new Date(formattedDate);return dateObj.getTime(); // 返回13位时间戳(毫秒级)}

相关文章:

  • python:练习:2
  • 双重差分模型学习笔记(理论)
  • YOLO学习笔记 | YOLOv8与卡尔曼滤波实现目标跟踪与预测(附代码)
  • 【CF】Day46——Codeforces Round 967 (Div. 2) B
  • 【C++贪心】P6023 走路|普及
  • 欧拉计划 Project Euler60(素数对集合)题解
  • 双系统安装 ios放同一个u盘 ventory使用+windows安装,双系统互相访问中间盘 切换默认启动系统
  • 巧记英语四级单词 Unit7-上【晓艳老师版】
  • 多块盘创建RAID5以及后增加空间
  • 小结:PKI(Public Key Infrastructure,公钥基础设施)
  • CSdiy java 06
  • 西门子笔记四:Uart模块
  • 异步机制与 CPU 的关系解析
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 15)
  • 当 AI 成为 “数字新物种”:人类职业的重构与进化
  • 角度(degrees)和弧度(radians)转换关系
  • Glide 如何加载远程 Base64 图片
  • 链表反转操作经典问题详解
  • 关于 const a 定义的数据 与 其渲染 的问题。即通过const定义的常量,会不会导致渲染不及时。
  • 原语的使用
  • 新型算法助力听障人士听得更清晰
  • 中国人民解放军南部战区位南海海域进行例行巡航
  • 从腰缠万贯到债台高筑、官司缠身:尼泊尔保皇新星即将陨落?
  • 幸福航空五一前三天航班取消:客服称目前是锁舱状态,无法确认何时恢复
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 伊朗国防部发言人:发生爆炸的港口无进出口军用物资