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.pswp.cn/diannao/76418.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76418.shtml
英文地址,請注明出處:http://en.pswp.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.前端實現 <…