当前位置: 首页 > article >正文

element-ui 中el-calendar 日历插件获取显示的第一天和最后一天【原创】

需要获取el-calendar 日历组件上的第1天和最后一天。可以通过document.querySelector()方法进行获取dom元素中的值,这样避免计算问题。
在这里插入图片描述
获取的过程中主要有两个难点,第1个是处理上1月和下1月的数据,第2个是跨年的数据。
直接贴代码,这个方法可以运用到1、点击上个月,今天、下个月三个按钮,实现点击获取最新的日历组件上的第1天和最后一天。2、通过watch实时监听。

    getRange(date) {
      const today = date ? new Date(date) : new Date();

      // 初始化 startDate 和 endDate
      let startDate = null;
      let endDate = null;

      // 获取日历中的第一个和最后一个单元格
      let firstCell = document.querySelector('#pane-3 > div > div > div.el-calendar__body > table > tbody > tr:nth-child(1) > td:nth-child(1) > div > div > div:nth-child(1) > div > div');
      let lastCell = document.querySelector('#pane-3 > div > div > div.el-calendar__body > table > tbody > tr:nth-child(6) > td:nth-child(7) > div > div > div:nth-child(1) > div > div');

      // 设置 startDate
      if (firstCell && parseInt(firstCell.textContent.trim(), 10) > 1) {
        // 获取前一个月和年份
        let prevMonth = today.getMonth() - 1;
        let year = today.getFullYear();
        if (prevMonth < 0) {
          prevMonth = 11; // 上一年的12月
          year -= 1;
        }
        const monthStr = String(prevMonth + 1).padStart(2, '0'); // 月份从1开始
        const dayStr = String(firstCell.textContent.trim()).padStart(2, '0');
        startDate = `${year}-${monthStr}-${dayStr}`;
      } else {
        // 当月第一天
        const month = today.getMonth() + 1;
        const monthStr = String(month).padStart(2, '0');
        startDate = `${today.getFullYear()}-${monthStr}-01`;
      }

      // 设置 endDate
      if (lastCell && parseInt(lastCell.textContent.trim(), 10) < 30) {
        // 获取下一个月和年份
        let nextMonth = today.getMonth() + 1;
        let year = today.getFullYear();
        if (nextMonth > 11) {
          nextMonth = 0; // 下一年的1月
          year += 1;
        }
        const monthStr = String(nextMonth + 1).padStart(2, '0'); // 月份从1开始
        const dayStr = String(lastCell.textContent.trim()).padStart(2, '0');
        endDate = `${year}-${monthStr}-${dayStr}`;
      } else {
        // 当月最后一天
        const lastDay = new Date(today.getFullYear(), today.getMonth() + 1, 0).getDate();
        const month = today.getMonth() + 1;
        const monthStr = String(month).padStart(2, '0');
        endDate = `${today.getFullYear()}-${monthStr}-${String(lastDay).padStart(2, '0')}`;
      }

      // 返回包含 startDate 和 endDate 的对象
      return {
        startDate,
        endDate
      };
    }

运行测试截图

运行测试截图


http://www.kler.cn/a/410605.html

相关文章:

  • MySQL原理简介—10.SQL语句和执行计划
  • 国土安全部发布关键基础设施安全人工智能框架
  • 【JUC-Interrupt】中断相关概念
  • C++ —— 以真我之名 如飞花般绚丽 - 智能指针
  • SAP开发语言ABAP常见面试问题及答案
  • elasticsearch7.10.2集群部署带认证
  • 摄像机常见的问题及解决方法
  • HTML5 视频 Vedio 标签详解
  • 实现 UniApp 右上角按钮“扫一扫”功能实战教学
  • Java面试之多线程并发篇
  • django authentication 登录注册
  • Stable Diffusion入门教程
  • 从多个角度探索TOX革新Web3时代价值创造与重新分配
  • MySQL与Informix数据库中的同义表创建:深入解析与比较
  • Web3 游戏周报(11.17 - 11.23)
  • 远程控制软件:探究云计算和人工智能的融合
  • JavaWeb——Mybatis
  • 什么是回退机制
  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • ubuntu 安装proxychains
  • 【ArcGISPro】Sentinel-2数据处理
  • Spring AI Fluent API:与AI模型通信的流畅体验
  • 【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
  • [高阶数据结构二] LRU Cache详解
  • C语言数据结构——详细讲解 双链表
  • Axure PR 9 二级滑动选择器 设计交互