根据当前日期计算并选取上一个月和上一个季度的日期范围,用于日期控件的快捷选取功能

1.选择月份范围

代码如下:

html 复制代码
   <el-date-picker v-model="value" type="monthrange" align="right" unlink-panels range-separator="至"
            start-placeholder="开始月份" end-placeholder="结束月份" :picker-options="pickerOptions">
          </el-date-picker>
javascript 复制代码
 pickerOptions: {
        shortcuts: [{
          text: '本月',
          onClick(picker) {
            picker.$emit('pick', [new Date(), new Date()]);
          }
        }, {
          text: '上个月',
          onClick(picker) {
            const end = new Date();
            const start = new Date();
            start.setMonth(start.getMonth() - 1);
            picker.$emit('pick', [start, end]);
          }
        }, {
          text: '上季度',
          onClick(picker) {
            const end = new Date();
            const month = end.getMonth();
            let start = new Date();

            // 计算上一个季度的开始和结束日期
            if (month >= 0 && month <= 2) {  // 第一季度
              start.setFullYear(end.getFullYear() - 1, 9, 1);
              end.setFullYear(end.getFullYear() - 1, 11, 31);
            } else if (month >= 3 && month <= 5) {
              start.setFullYear(end.getFullYear(), 0, 1);
              end.setFullYear(end.getFullYear(), 2, 31);
            } else if (month >= 6 && month <= 8) {
              start.setFullYear(end.getFullYear(), 3, 1);
              end.setFullYear(end.getFullYear(), 5, 30);
            } else {  // 第四季度
              start.setFullYear(end.getFullYear(), 6, 1);
              end.setFullYear(end.getFullYear(), 8, 30);
            }

            picker.$emit('pick', [start, end]);
          }
        }]
      },
      value: ''

2.选择日期范围

代码如下:

html 复制代码
        <el-date-picker v-model="value" type="daterange" align="right" unlink-panels range-separator="至"
          start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions">
        </el-date-picker>
javascript 复制代码
      pickerOptions: {
        shortcuts: [{
          text: '本月',
          onClick(picker) {
            picker.$emit('pick', [new Date(), new Date()]);
          }
        }, {
          text: '上个月',
          onClick(picker) {
            const end = new Date();
            const start = new Date();
            start.setMonth(start.getMonth() - 1);
            start.setDate(1); 
            end.setMonth(end.getMonth() - 1);
            end.setMonth(end.getMonth() + 1, 0);
            picker.$emit('pick', [start, end]);
          }
        }, {
          text: '上季度',
          onClick(picker) {
            const end = new Date();
            const month = end.getMonth();
            let start = new Date();

            if (month >= 0 && month <= 2) {
              start.setFullYear(end.getFullYear() - 1, 9, 1);
              end.setFullYear(end.getFullYear() - 1, 11, 31);
            } else if (month >= 3 && month <= 5) {
              start.setFullYear(end.getFullYear(), 0, 1);
              end.setFullYear(end.getFullYear(), 2, 31);
            } else if (month >= 6 && month <= 8) {
              start.setFullYear(end.getFullYear(), 3, 1);
              end.setFullYear(end.getFullYear(), 5, 30);
            } else {
              start.setFullYear(end.getFullYear(), 6, 1);
              end.setFullYear(end.getFullYear(), 8, 30);
            }

            picker.$emit('pick', [start, end]);
          }
        }]
      },
      value: '',
相关推荐
slim~3 分钟前
javaweb基础第一天总结(HTML-CSS)
前端·css·html
一支鱼7 分钟前
leetcode常用解题方案总结
前端·算法·leetcode
惜.己20 分钟前
针对nvm不能导致npm和node生效的解决办法
前端·npm·node.js
F2E_Zhangmo1 小时前
基于cornerstone3D的dicom影像浏览器 第二章 加载本地文件夹中的dicom文件并归档
前端·javascript·css
用户21411832636021 小时前
Nano Banana免费方案来了!Docker 一键部署 + 魔搭即开即用,小白也能玩转 AI 图像编辑
前端
weixin_584121431 小时前
vue3+ts导出PDF
javascript·vue.js·pdf
Zacks_xdc2 小时前
【前端】使用Vercel部署前端项目,api转发到后端服务器
运维·服务器·前端·安全·react.js
尚学教辅学习资料2 小时前
Ruoyi-vue-plus-5.x第五篇Spring框架核心技术:5.1 Spring Boot自动配置
vue.js·spring boot·spring
给月亮点灯|2 小时前
Vue基础知识-脚手架开发-使用Axios发送异步请求+代理服务器解决前后端分离项目的跨域问题
前端·javascript·vue.js
张迅之2 小时前
【React】Ant Design 5.x 实现tabs圆角及反圆角效果
前端·react.js·ant-design