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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…