news 2026/7/1 13:59:37

DateRangePicker 日期范围选择器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DateRangePicker 日期范围选择器

DateRangePicker 日期范围选择器,基于 el-date-picker 封装,默认按月选择,自动补齐首尾日期。

快速使用

<DateRangePicker v-model="dateRange"/><DateRangePicker v-model="dateRange"type="daterange"/><DateRangePicker v-model="dateRange"type="yearrange"/>

Props

modelValue Array v-model 绑定值,格式['YYYY-MM-DD','YYYY-MM-DD']typeString 选择类型:'monthrange'(默认)|'daterange'|'yearrange'valueFormat String 输出日期格式,默认'YYYY-MM-DD'clearable Boolean 是否可清空,默认falseautoDefault Boolean 无值时自动填入本年度,默认 true;设为false则不填 startPlaceholder String 开始日期占位,默认'开始日期'endPlaceholder String 结束日期占位,默认'结束日期'

默认行为

- 默认选中本年度(1月1日 ~12月31日) - 月模式:选中"1月→3月"自动返回['2026-01-01','2026-03-31']- 年模式:选中"2024→2025"自动返回['2024-01-01','2025-12-31']- 不可清空(可传入 clearable 开启) - 支持$attrs透传(disabledDate、size 等原生属性)
<template><el-date-picker v-model="innerValue":type="type":value-format="innerValueFormat":clearable="clearable"range-separator="-":start-placeholder="startPlaceholder":end-placeholder="endPlaceholder"v-bind="$attrs"/></template><script setup>import{computed, onMounted}from'vue';defineOptions({name:'DateRangePicker'});const props=defineProps({modelValue:{type: Array, default:()=>[]}, // 类型:monthrange(默认按月)|daterange(按日)|yearrange(按年)type:{type: String, default:'monthrange'}, valueFormat:{type: String, default:'YYYY-MM-DD'}, clearable:{type: Boolean, default:false}, autoDefault:{type: Boolean, default:true}, // 是否自动填入本年度默认值 startPlaceholder:{type: String, default:'开始日期'}, endPlaceholder:{type: String, default:'结束日期'},});const emit=defineEmits(['update:modelValue']);const now=new Date();const currentYear=now.getFullYear();// 默认值:本年度1月1日 ~12月31日 const defaultRange=computed(()=>{ if(props.type==='yearrange')return [`${currentYear}`,`${currentYear}`];return [`${currentYear}-01-01`,`${currentYear}-12-31`];});onMounted(()=>{ if(props.autoDefault&&(!props.modelValue||props.modelValue.length<2)){emit('update:modelValue',[...defaultRange.value]);}});// 内部传给 el-date-picker 的formatconst innerValueFormat=computed(()=>{ if(props.type==='monthrange')return 'YYYY-MM';if(props.type==='yearrange')return 'YYYY';return props.valueFormat;});//获取某月的最后一天 const lastDayOfMonth=(year,month)=>new Date(year,month,0).getDate();const innerValue=computed({ get(){ if(!props.modelValue||props.modelValue.length<2){ if(!props.autoDefault)return null;//默认本年度 if(props.type==='monthrange')return [`${currentYear}-01`,`${currentYear}-12`];if(props.type==='yearrange')return [`${currentYear}`,`${currentYear}`];return [`${currentYear}-01-01`,`${currentYear}-12-31`];} if(props.type==='monthrange'){//YYYY-MM-DD → YYYY-MM return props.modelValue.map(v=>(v||'').substring(0,7));}if(props.type==='yearrange'){// YYYY-MM-DD → YYYYreturnprops.modelValue.map(v=>(v||'').substring(0,4));}returnprops.modelValue;}, set(val){if(!val||val.length<2){emit('update:modelValue',[]);return;}if(props.type==='monthrange'){// val=['2024-01','2024-03']['2024-01-01','2024-03-31']const[endYear, endMonth]=val[1].split('-').map(Number);const start=`${val[0]}-01`;const end=`${val[1]}-${String(lastDayOfMonth(endYear, endMonth)).padStart(2,'0')}`;emit('update:modelValue',[start, end]);}elseif(props.type==='yearrange'){// val=['2024','2025']['2024-01-01','2025-12-31']emit('update:modelValue',[`${val[0]}-01-01`,`${val[1]}-12-31`]);}else{emit('update:modelValue', val);}}});</script>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 13:58:46

STM32与BNO055构建10DOF环境感知系统实战

1. 项目背景与核心价值在智能硬件和物联网设备开发中&#xff0c;精确的方向跟踪和环境监测一直是两个关键的技术挑战。BNO055作为博世推出的9轴绝对方向传感器&#xff0c;结合STM32F373VC这款带有丰富模拟外设的ARM Cortex-M4微控制器&#xff0c;能够构建一个高精度的10自由…

作者头像 李华
网站建设 2026/7/1 13:57:51

Si5351A时钟发生器原理与应用指南

1. 为什么电子系统需要稳定的频率参考&#xff1f;在现代电子系统中&#xff0c;稳定的频率参考就像人类的心跳一样重要。无论是通信设备、测试仪器还是嵌入式系统&#xff0c;几乎所有数字电路都需要一个精确的时钟信号来同步各个部件的工作。想象一下&#xff0c;如果心脏跳动…

作者头像 李华
网站建设 2026/7/1 13:56:28

MC6470与PIC18LF46K40实现高精度运动控制方案

1. 项目概述&#xff1a;MC6470与PIC18LF46K40的强强联合在嵌入式控制领域&#xff0c;精确的运动感知与实时控制一直是开发者面临的挑战。MC6470作为一款6自由度惯性测量单元(6DOF IMU)&#xff0c;配合PIC18LF46K40微控制器的强大处理能力&#xff0c;为各类需要高精度姿态检…

作者头像 李华
网站建设 2026/7/1 13:56:08

技术革命:下一代智能激活架构的解构与重构

技术革命&#xff1a;下一代智能激活架构的解构与重构 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化转型的浪潮中&#xff0c;软件授权管理正经历着从传统许可证模式向智能化、分布式…

作者头像 李华
网站建设 2026/7/1 13:55:43

Java毕设项目:基于 SpringBoot 的保险公司业务台账与数据分析系统的设计与实现 基于 SpringBoot 的金融保险数据统计与业务运维系统 (源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华