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

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: '',
相关推荐
子兮曰16 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰17 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万17 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝17 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A17 小时前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋17 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁18 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
honkun619 小时前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs199120 小时前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王952720 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端