vue3+element-plus el-date-picker日期、年份篩選設置本周、本月、近3年等快捷篩選

一、頁面代碼:

<template>

<!-- 日期范圍篩選框 -->

<el-date-picker

? ? ? ? ? v-model="dateRange"

? ? ? ? ? value-format="YYYY-MM-DD"

? ? ? ? ? type="daterange"

? ? ? ? ? range-separator="至"

? ? ? ? ? start-placeholder="開始日期"

? ? ? ? ? end-placeholder="結束日期"

? ? ? ? ? :shortcuts="shortcuts"

? ? ? ? ? placement="bottom-start"

? ? ? ? ? :editable="false"

? ? ? ? ? :disabled-date="disabledDate"

? ? ? ? ? @change="changeDate"

? ? ? ? ? class="date-select"

? ? ? ? />

<!-- 年份范圍篩選框 -->

<el-date-picker

? ? ? ? v-model="yearRange"

? ? ? ? value-format="YYYY"

? ? ? ? type="yearrange"

? ? ? ? range-separator="至"

? ? ? ? start-placeholder="開始年份"

? ? ? ? end-placeholder="結束年份"

? ? ? ? :shortcuts="shortcuts1"

? ? ? ? placement="bottom-start"

? ? ? ? :editable="false"

? ? ? ? :disabled-date="disabledYear"

? ? ? ? @change="changeYear"

? ? ? ? @clear="changeYear1"

? ? ? ? class="date-select"

? ? ? ? ref="yearPicker"

? ? ? />

</template>

<script setup lang="ts">

import common from '@/utils/common'

const startDate = ref<any>() // 開始時間

const endDate = ref<any>() //結束時間

const dateRange = ref<any>([]) // 日期范圍值

const yearPicker = ref() // 年份篩選框ref

const yearRange = ref<any>([]) // 年份范圍值

// 日期快捷選項

const shortcuts = [

? {

? ? text: '今日',

? ? value: () => {

? ? ? const end = new Date()

? ? ? const start = new Date()

? ? ? return [start, end]

? ? }

? },

? {

? ? text: '本周',

? ? value: () => {

? ? ? const end = new Date()

? ? ? const start = new Date()

? ? ? start.setDate(start.getDate() - start.getDay() + 1)

? ? ? start.setHours(0, 0, 0, 0) // 將時間設置為當天時間的0點

? ? ? return [start, end]

? ? }

? },

? {

? ? text: '本月',

? ? value: () => {

? ? ? const end = new Date()

? ? ? const start = new Date(end.getFullYear(), end.getMonth(), 1) // 這個月1號

? ? ? return [start, end]

? ? }

? }

]

// 年份快捷選項

const shortcuts1 = [

? {

? ? text: '今年',

? ? value: [new Date(), new Date()]

? },

? {

? ? text: '近3年',

? ? value: () => {

? ? ? const end = new Date()

? ? ? const start = new Date(

? ? ? ? new Date().setFullYear(new Date().getFullYear() - 2) // 設置開始時間為當前時間前2年(包含當前年)

? ? ? )

? ? ? return [start, end]

? ? }

? },

? {

? ? text: '近5年',

? ? value: () => {

? ? ? const end = new Date()

? ? ? const start = new Date(

? ? ? ? new Date().setFullYear(new Date().getFullYear() - 4) // 設置開始時間為當前時間前4年(包含當前年)

? ? ? )

? ? ? return [start, end]

? ? }

? }

]

// 初始化設置默認7天日期

const initTime = () => {

? startDate.value = common.formatDate(

? ? new Date(new Date().getTime() - 6 * 24 * 60 * 60 * 1000),

? ? 'yyyy-MM-dd'

? )

? endDate.value = common.formatDate(new Date(), 'yyyy-MM-dd')

? dateRange.value = [startDate.value, endDate.value]

}

// 控制當前日期之后不能選

const disabledDate = (time: any) => {

? return time.getTime() > new Date().getTime()

}

// 改變日期

const changeDate = (value: any) => {

? if (value) {

? ? dateRange.value = toRaw(value)

? ? startDate.value = dateRange.value[0]

? ? endDate.value = dateRange.value[1]

? } else {

? ? dateRange.value = toRaw(value)

? ? startDate.value = ''

? ? endDate.value = ''

? }

}

// 控制指定年份不能選(可選2019年到當前年)

const disabledYear = (time: any) => {

? const year = time.getFullYear()

? return year < 2019 || year > new Date().getFullYear()

}

// 改變年份

const changeYear?= (value: any) => {

? if (value) {

? ? if (yearPicker.value) {

? ? ? yearPicker.value.blur()

? ? }

????????yearRange.value = toRaw(value)

? }

}

// 清空時間

const changeYear1 = () => {

? yearRange.value = []

}

onMounted(() => {

????????initTime()

}

</script>

<style lang="less" scoped>

:deep(.el-date-editor) {

? ? ? ? width: 240px;

? ? ? ? height: 32px;

? ? ? ? border-radius: 4px;

? ? ? ? font-size: 12px !important;

? ? ? }

</style>

二、common文件方法:

formatDate: function (date: any, format: any) {

? ? let v = ''

? ? if (typeof date === 'string' || typeof date !== 'object') {

? ? ? return

? ? }

? ? const year = date.getFullYear()

? ? const month = date.getMonth() + 1

? ? const day = date.getDate()

? ? const hour = date.getHours()

? ? const minute = date.getMinutes()

? ? const second = date.getSeconds()

? ? const weekDay = date.getDay()

? ? const ms = date.getMilliseconds()

? ? let weekDayString = ''

? ? if (weekDay === 1) {

? ? ? weekDayString = '星期一'

? ? } else if (weekDay === 2) {

? ? ? weekDayString = '星期二'

? ? } else if (weekDay === 3) {

? ? ? weekDayString = '星期三'

? ? } else if (weekDay === 4) {

? ? ? weekDayString = '星期四'

? ? } else if (weekDay === 5) {

? ? ? weekDayString = '星期五'

? ? } else if (weekDay === 6) {

? ? ? weekDayString = '星期六'

? ? } else if (weekDay === 0) {

? ? ? weekDayString = '星期日'

? ? }

? ? v = format

? ? // Year

? ? v = v.replace(/yyyy/g, year)

? ? v = v.replace(/YYYY/g, year)

? ? v = v.replace(/yy/g, (year + '').substring(2, 4))

? ? v = v.replace(/YY/g, (year + '').substring(2, 4))

? ? // Month

? ? const monthStr = '0' + month

? ? v = v.replace(/MM/g, monthStr.substring(monthStr.length - 2))

? ? // Day

? ? const dayStr = '0' + day

? ? v = v.replace(/dd/g, dayStr.substring(dayStr.length - 2))

? ? // hour

? ? const hourStr = '0' + hour

? ? v = v.replace(/HH/g, hourStr.substring(hourStr.length - 2))

? ? v = v.replace(/hh/g, hourStr.substring(hourStr.length - 2))

? ? // minute

? ? const minuteStr = '0' + minute

? ? v = v.replace(/mm/g, minuteStr.substring(minuteStr.length - 2))

? ? // Millisecond

? ? v = v.replace(/sss/g, ms)

? ? v = v.replace(/SSS/g, ms)

? ? // second

? ? const secondStr = '0' + second

? ? v = v.replace(/ss/g, secondStr.substring(secondStr.length - 2))

? ? v = v.replace(/SS/g, secondStr.substring(secondStr.length - 2))

? ? // weekDay

? ? v = v.replace(/E/g, weekDayString)

? ? return v

? }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84682.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 關于用戶的權限信息查看

1: 先連接mysql : [rootxx ~]# mysql -u admin -p -h 8.8.8.8 -P 3306 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 38 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2025, Oracle and/or …

C++ STL stack容器使用詳解

一、stack容器概述 stack容器適配器是C標準模板庫(STL)中實現后進先出(LIFO)數據結構的重要組件&#xff0c;它通過封裝底層容器&#xff08;如deque/vector/list&#xff09;提供棧操作接口。 二、stack核心操作詳解 1. 容器構造方式 // 默認使用deque存儲元素 stack<i…

科技趨勢分析系統 BBC (Big Bang of Computing)

科技趨勢分析系統 BBC (Big Bang of Computing) 技術文檔 1. 項目概述 BBC (Big Bang of Computing) 是一個基于 arXiv 論文數據的科技趨勢分析系統&#xff0c;旨在通過分析海量的學術文獻&#xff0c;結合大語言模型&#xff08;LLM&#xff09;進行增強分析&#xff0c;提…

尚硅谷redis7 55-57 redis主從復制之理論簡介

55 redis主從復制之理論簡介 定義 Redis 主從復制&#xff08;Master-Slave Replication&#xff09;是 Redis 提供的一種數據冗余和高可用機制&#xff0c;可以讓一個 Redis 主節點的數據復制到一個或多個從節點&#xff0c;實現讀寫分離、容災備份等功能。 主節點&#xff…

CarPropertyService 介紹

目錄 1. CarPropertyService 基本介紹 1.1 CarPropertyService 結構圖 1.2 CarPropertyService 的定義與實現 1.3 CarPropertyManager 與 CarPropertyService 2. PropertyHalService 與 CarPropertyService 3. CarPropertyService 的重要接口介紹 3.1 CarPropertyServi…

JavaScript 性能優化按層次逐步分析

JavaScript 性能優化實戰 &#x1f4a1; 本文數據基于Chrome 136實測驗證&#xff0c;涵蓋12項核心優化指標&#xff0c;通過20代碼案例演示性能提升300%的實戰技巧。 一、代碼層深度優化 1. 高效數據操作&#xff08;百萬級數據處理&#xff09; // 不良實踐&#xff1a;頻繁…

【東楓科技】基于Docker,Nodejs,GitSite構建一個KB站點

Docker 安裝桌面版本&#xff0c;安裝Node鏡像 運行node鏡像 需求 和外部的某個文件夾地址可以綁定端口可以綁定&#xff0c;方便server的訪問 docker run -itd --name node-test -v C:/Users/fs/Documents/GitHub:/home/node -p 3000:3000 node進入終端 docker exec -it …

【小白AI教程】大模型知識掃盲通識

目錄 一、究竟什么是大模型 二、大模型的兩大分支 2.1 在線大模型 2.2 開源大模型 2.3 大模型的應用 利用行業知識重新訓練AI大模型 利用行業知識對AI大模型進行微調 利用行業知識建立知識庫 三、Reasoning 大模型 3.1 基本概述 3.2 核心概念 3.3 技術實現 3.4 應…

測試 Gemini Pro 2.5

好的&#xff0c;我已經明白了您的需求。您希望&#xff1a; 增大概覽消息&#xff08;Toast&#xff09;的尺寸&#xff1a;使其更加醒目。消息持久性&#xff1a;當在用戶中心內部切換不同標簽頁&#xff08;例如從“個人信息”切換到“安全設置”&#xff09;時&#xff0c…

大模型——MCP 深度解析

MCP 深度解析 套用一句關于幺半群的名言:"MCP 是一種開放協議,用于標準化應用程序向 LLM 提供上下文的方式,問題何在?"但即使花數小時閱讀 MCP 的定義并實操示例,仍難以清晰把握其具體運作流程:LLM 負責什么?MCP 服務器做什么?MCP 客戶端的角色是什么?數據…

使用 scikit-learn 庫對烏克蘭沖突事件數據集進行多維度分類分析

使用scikit-learn庫對烏克蘭沖突事件數據集進行多維度分類分析 背景 在現代沖突研究中&#xff0c;對沖突事件進行多維度分析和可視化可以幫助我們更好地理解沖突的模式、趨勢和影響因素。本次作業將使用開源沖突數據&#xff0c;構建一個完整的機器學習分類流程&#xff0c;…

工作流 x 深度學習:揭秘藍耘元生代如何用 ComfyUI 玩轉 AI 開發

目錄 一、從 “代碼噩夢” 到 “積木游戲”&#xff1a;我與工作流的初次碰撞 二、深度學習&#xff1a;復雜而迷人的 “數字迷宮” &#xff08;一&#xff09;深度學習的神秘面紗 &#xff08;二&#xff09;深度學習的發展歷程 &#xff08;三&#xff09;深度學習面臨…

《軟件工程》第 14 章 - 持續集成

在軟件工程的開發流程中&#xff0c;持續集成是保障代碼質量與開發效率的關鍵環節。本章將圍繞持續集成的各個方面展開詳細講解&#xff0c;結合 Java 代碼示例與可視化圖表&#xff0c;幫助讀者深入理解并實踐相關知識。 14.1 持續集成概述 14.1.1 持續集成的相關概念 持續集…

1992-2021年各省工業增加值數據(無缺失)

1992-2021年各省工業增加值數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;1992-2021年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;工業增加值 4、范圍&#xff1a;31省 5、缺失情況&#xff1a;無缺失 6、指標說明&#xff1a;工業增加值是…

Android15 Camera Hal設置logLevel控制日志輸出

這里說明三個內容 Camera Hal Demo默認使用的也是Android原生日志接口&#xff08;例如&#xff1a;ALOGD, ALOGV&#xff09;&#xff0c;為什么logLevel設置為V級別&#xff0c;但是通過ALOGV打印的日志不輸出&#xff0c;不生效Camera Hal Demo在不修改ALOGX接口使用的情況…

C++:設計模式--工廠模式

更多內容&#xff1a;XiaoJ的知識星球 目錄 1.簡單工廠模式1.1 簡單工廠1.2 實現步驟1.3 實現代碼1.4 優缺點 2.工廠模式2.1 工廠模式2.2 實現步驟2.3 實現代碼2.4 優缺點 3.抽象工廠模式3.1 抽象工廠模式3.2 實現步驟3.3 實現代碼3.4 優缺點 1.簡單工廠模式 . 1.1 簡單工廠 …

【DSP筆記】掌握數字世界的律動:時域離散信號與系統基礎

掌握數字世界的律動&#xff1a;時域離散信號與系統基礎 想象一下&#xff0c;你用手機拍了一張照片&#xff0c;或者聽了一首MP3歌曲。這些圖片和聲音&#xff0c;原本都是連續變化的模擬信號&#xff0c;但為什么它們能被你的手機存儲和處理呢&#xff1f;秘密就在于“數字化…

織夢dedecms上傳附件不自動改名的辦法

織夢dedecms的系統在上傳附件后&#xff0c;會將文件自動改名字&#xff0c;那怎么樣才能讓附件上傳后不自動改名字呢&#xff0c;讓附件上傳后不自動改名字(中文名的附件將會改成拼音文件名稱)&#xff0c;現在說一下方法吧&#xff1a; 我們打開網站目錄下include\dialog\se…

https下git拉取gitlab倉庫源碼

git init 創建倉庫 參考下面創建公私秘鑰對 GitLab配置ssh key - 阿豪聊干貨 - 博客園 Your identification has been saved in /home/xxx/.ssh/id_ed25519 Your public key has been saved in /home/xxx/.ssh/id_ed25519.pub 然后查看對應公鑰&#xff0c;復制 cat ~/.ss…

Mybatis使用update更新值為null時不生效問題解決

1.出現的問題 前端修改數據時把屬性內容刪除然后進行保存&#xff0c;默認傳的null&#xff0c;后端更新時屬性值為null&#xff0c; 然后調用updateById進行更新時發現該屬性還是原來的值&#xff1a; update方法不會對屬性null的進行更新 2.原因 mybatis-plus FieldStrat…