vue开始时间小于等于结束时间,且开始时间小于等于系统时间,时间格式:年月日时分

// 日期配置
export const DATA_CONFIGS = [{itemKey: "startDate",startDateKey: "startDate",endDateKey: "endDate",isStart: true,},{itemKey: "endDate",startDateKey: "startDate",endDateKey: "endDate",isStart: false,},
];
onBeforeMount(async () => {// 遍历配置项,批量设置日期配置DATA_CONFIGS.forEach((config) => handleDateConfig(config));
});
// 禁用日期开始时间>=结束时间,开始时间最多选到当前后台系统时间,
function handleDateConfig(config) {const { itemKey, isStart = true } = config;const item = findItem(formConfig.value.formItems, itemKey);if (item) {// 禁用日期item.disabledDate = (date) =>isStart? startDateDisabled(date, form.value.endDate, sysTime.value): endDateDisabled(date, form.value.startDate);// 禁用小时item.disabledHours = () =>hoursDisabled(form.value.startDate || (isStart && sysTime.value),form.value.endDate || (isStart && sysTime.value),isStart,);// 禁用分钟item.disabledMinutes = () =>minutesDisabled(form.value.startDate || (isStart && sysTime.value),form.value.endDate || (isStart && sysTime.value),isStart,);}
}

处理开始时间,若开始时间大于结束时间,开始时间值修改为结束时间

// 开始时间
watch(() => form.value?.startDate,() => {handleStartDate(form);},
);// 处理开始时间,若开始时间大于结束时间,开始时间值修改为结束时间
export function handleStartDate(form) {const { startDate } = form.value;// 如果开始时间存在并且结束时间存在if (startDate && form.value.endDate) {const startDateObj = dayjs(startDate);const endDateObj = dayjs(form.value.endDate);// 如果开始时间大于结束时间if (startDateObj.isAfter(endDateObj)) {// 将开始时间修改为结束时间form.value.startDate = endDateObj.format("YYYY-MM-DD HH:mm");}}
}

处理结束时间,若结束时间小于开始时间,结束时间值修改为开始时间


// 结束时间
watch(() => form.value?.endDate,() => {handleEndDate(form);},
);
// 处理结束时间,若结束时间小于开始时间,结束时间值修改为开始时间
export function handleEndDate(form) {const { startDate } = form.value;// 如果开始时间存在并且结束时间存在if (startDate && form.value.endDate) {const startDateObj = dayjs(startDate);const endDateObj = dayjs(form.value.endDate);// 若结束时间小于开始时间,结束时间值修改为开始时间if (endDateObj.isBefore(startDateObj)) {form.value.endDate = dayjs(startDate).format("YYYY-MM-DD HH:mm");}}
}

禁用日期方法

/*** 禁用开始日期,即在结束日期或当前系统日期之后。**/
export const startDateDisabled = (date, endDate, sysTime) => {const _date = dayjs(date).startOf("day");const endDateWithoutTime = dayjs(endDate).startOf("day"); // 获取没有时间部分的 endDateconst sysDateWithoutTime = dayjs(sysTime).startOf("day"); // 获取没有时间部分的 sysTime// 只要 _date 超过其中任何一个日期(即 'endDate''sysTime'),禁用日期return _date.isAfter(endDateWithoutTime) || _date.isAfter(sysDateWithoutTime);
};
/*** 禁用结束日期,即在开始日期之后。**/
export const endDateDisabled = (date, startDate) => {if (!startDate || !date) return false;const _date = dayjs(date); // 转换成 dayjs 对象,直接比较// 获取没有时间部分的 startDateconst startDateWithoutTime = dayjs(startDate).startOf("day");// 只要 _date 超过startDate,禁用日期return _date.isBefore(startDateWithoutTime);
};export function findItem(formItems, val, property = "name") {return formItems.find((item) => item[property] === val) || {};
}

禁用小时和分钟方法

// 禁用-小时
export const hoursDisabled = (startTime, endTime, isStartTime = true) => {if (!startTime || !endTime) {return [];}if (isSameDate(startTime, endTime)) {if (isStartTime) {const endHour = dayjs(endTime).hour();// 生成从 endHour + 123 的数组return Array.from({ length: 24 - endHour - 1 }, (_, index) => endHour + 1 + index);} else {const startHour = dayjs(startTime).hour();// 生成从0 到 开始小时-1 的数组return Array.from({ length: startHour }, (v, k) => k);}}return [];
};
// 禁用-分钟
export const minutesDisabled = (startTime, endTime, isStartTime = true, allowEqual = true) => {if (!startTime || !endTime) {return [];}const startHour = dayjs(startTime).hour();const endHour = dayjs(endTime).hour();if (isSameDate(startTime, endTime)) {if (startHour === endHour) {if (isStartTime) {const endMinute = dayjs(endTime).minute();if (allowEqual) {// 生成从 endMinute + 159 的数组return Array.from({ length: 60 - endMinute - 1 }, (_, index) => endMinute + 1 + index);} else {// 生成从 endMinute  到 59 的数组return Array.from({ length: 60 - endMinute }, (_, index) => endMinute + index);}} else {const startMinute = dayjs(startTime).minute();if (allowEqual) {// 生成从0 到 startMinute-1 的数组return Array.from({ length: startMinute }, (v, k) => k);} else {// 生成从0 到 startMinute 的数组return Array.from({ length: startMinute + 1 }, (v, k) => k);}}}}return [];
};
function isSameDate(date1, date2) {// 设置为当天的开始const formattedDate1 = dayjs(date1).startOf("day");const formattedDate2 = dayjs(date2).startOf("day");return formattedDate1.isSame(formattedDate2);
}

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

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

相关文章

PyCharm 下载与安装教程:从零开始搭建你的 Python 开发环境

PyCharm 是一款专为 Python 开发设计的集成开发环境(IDE),它提供了强大的代码编辑、调试、版本控制等功能,是 Python 开发者的必备工具之一。如果你是初学者,或者正在寻找一款高效的开发工具,这篇文章将帮助…

Qt线程等待条件QWaitCondition

Qt 线程等待条件 概念 Qt提供了QWaitCondition类实现“等待条件”式的线程控制方法,它让线程阻塞在等待条件的地方,直到条件满足后才继续执行下去。也就是说,QWaitCondition可以使一个线程在满足一定条件时通知其他多个线程,使它…

RAG 和 RAGFlow 学习笔记

一、RAG(检索增强生成) 1. RAG 的定义与核心思想 RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合 信息检索(Retrieval) 和 文本生成(Generation) 的技术…

Windows连接服务器Ubuntu_MobaXterm

通过 SSH 远程连接(命令行方式) 🔧 所需工具: Windows:MobaXterm(强烈推荐)或 PuTTY Ubuntu:已开启 SSH 服务 Ubuntu 开启 SSH 服务(仅需一次) 在 Ubuntu …

Rust 中的高效视频处理:利用硬件加速应对高分辨率视频

引言 在视频处理领域,随着4K、8K甚至更高分辨率内容的普及,传统的CPU计算方式逐渐显得力不从心。无论是视频剪辑、直播流处理还是格式转换,高负载场景下CPU占用过高的问题常常让开发者头疼。硬件加速技术通过利用GPU等专用硬件分担编解码任务…

大模型提示工程中,提示、补全、指令、上下文和样本这几个概念的区别是什么?

提示 (Prompt) 定义:输入给大模型的完整文本刺激,是与模型交互的主要方式。 特点: 是最广义的概念,包含其他几个元素整体输入的总和,包括指令、上下文和样本等内容决定模型如何理解和处理请求 示例: 分…

AI的未来演进

企业数字IP实战:创始人分身如何实现品宣获客双赢? ——从量子化建模到联邦学习的全链路技术拆解 一、行业痛点:品牌信任与获客效率的双重困局 2025年数据显示,73%的企业因传统营销模式效率低下错失市场机遇(家居品牌…

软件定义无线电39

13.8 RFSoC上PYNQ的SDR设计流程 本节中详细介绍的设计过程可以分为六个独立的步骤,如图13.16所示,并在接下来的几页中进行讨论。 13.8.1 初始设计过程 。在这里,系统设计人员必须考虑许多因素,例如RFDC接收和/或发送的频率范围…

​自动化网络架构搜索(Neural Architecture Search,NAS)

NAS是一种旨在自动设计神经网络结构的技术。传统上,神经网络的架构设计依赖于专家的经验和大量的试错过程,而NAS通过算法自动搜索网络架构,以发现最适合特定任务的神经网络设计。 NAS的主要组成部分包括: 搜索空间:定…

Ubuntu 22.04 安装和运行 EDK2 超详细教程

Ubuntu 22.04 安装和运行 EDK2 超详细教程 适合新手小白,从零开始 🌟 1. 什么是 EDK2? EDK2(EFI Development Kit 2)是一个开源的 UEFI(统一可扩展固件接口)开发环境,主要用于编写和…

什么是STEP认证

**什么是STEP认证** STEP认证,全称为“可持续纺织生产认证”(Sustainable Textile Production),是一项由国际环保纺织协会Oeko-Tex提供的权威独立认证体系。这一认证体系犹如纺织和皮革行业的绿色灯塔,为追求可持续发…

odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘

文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…

[Linux系统编程]进程间通信—system V

进程间通信—system V 1. System V 共享内存(Shared Memory)1.1 共享内存的建立过程1.2 共享内存函数2. System V 消息队列(Message Queues)3. System V 信号量(Semaphores)4. 总结前言: 之前所提的管道通信是基于文件的,OS没有做过多的设计工作。 system V 进程间通信…

R语言——获取数据1

参考资料:学习R 数据的来源可以由很多。R内置有许多数据集,而在其他的附件包中能找到更多的数据。R能从各式各样的来源中读取,且支持大量的文件格式。 1、内置的数据集 R的基本分发包有一个datasets,里面全是示例数据集。很多其他…

HTTP 请求方法

HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…

python函数装饰器

python函数装饰器 声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步:Python 函数装饰器 下面的笔记来源于上述链接…

OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者: magnitude…

什么是向量搜索Vector Search?

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…

搜索工具Everything下载安装使用教程(附安装包)

文章目录 前言一、搜索工具Everything介绍二、搜索工具Everything使用步骤1.软件下载2.版本选取3.启动软件4.文件搜索 前言 本教程将详细为您介绍 Everything 的下载、安装与使用方法,助您快速上手,充分利用这款工具的强大功能,告别文件查找…

element-plus中,Upload上传组件的使用 + 后端处理

目录 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 2.后端实现 ①引入阿里云oss的依赖 ②编写AliOSSUtils工具类 ③编写controller层 ④编写service层 ⑤编写mapper层 3.效果展示 4.重点理解 结语 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 <…