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

el-date-picker 禁用一个月前、一个月后(当天之后)的时间 datetimerange

文章目录

  • 功能需求
    • 今天是 2025-01-09
    • 示例1
    • 示例2
  • 代码 Vue2

功能需求

时间范围选择器,最大时间选择尺度为一个月。

今天是 2025-01-09

示例1

选择 2025-01-02 日
禁用未来日期(2025-01-09之后日期)
禁用上月2号(31日之前)之前的日期
在这里插入图片描述

示例2

选择2024-12-02
禁用31日之前日期
禁用31日之后日期
在这里插入图片描述

代码 Vue2

<template>
  <el-date-picker
    v-model="dates"
    type="datetimerange"
    range-separator=""
    start-placeholder="开始日期"
    end-placeholder="结束日期"
    :picker-options="pickerOptions"
  ></el-date-picker>
</template>

<script>
export default {
  data() {
    return {
      dates: [],
      currentTime: '',
      pickerOptions: {
        onPick: ({minDate, maxDate}) => {
          if (maxDate) {
            this.currentTime = ''
            return
          }
          this.currentTime = minDate.getTime()
        },
        disabledDate: (time) => {
          const now = new Date()
          // 禁用当前时间之后的时间
          if (time.getTime() > now) return true

          // 禁用今天23:59:59 之后的时间;如果没有时、分、秒选择器,则不需要对时分秒进行特殊处理
          // if (time.getTime() > new Date(now.toLocaleDateString() + ' 23:59:59')) return true

          const limitDays = 31 * 24 * 3600 * 1000
          const minTime = this.currentTime - limitDays
          const maxTime = this.currentTime + limitDays

          // 禁用一月之前的时间
          if (time.getTime() < minTime) return true
          // 禁用一月之后 || 当前时间今天之后的时间
          // 添加this.currentTime判断: 如果未选择开始日期 或者 选择了结束时间时 this.currentTime 是 空的,
          if (this.currentTime && time.getTime() > maxTime) return true
          return false
        }
      }
    };
  },
  
  methods: {
    checkDisabled(date) {
      // 检查是否超过当前日期一个月
      const oneMonthLater = new Date(this.currentDate);
      oneMonthLater.setMonth(oneMonthLater.getMonth() + 1);
      if (date >= oneMonthLater) {
        this.disabledDays.push(date);
      }
    },
  },
  watch: {
    dates(newDates) {
      // 当日期范围改变时,更新禁用日期和当前日期
      this.currentDate = newDates[1];
      this.checkDisabled(newDates[0]);
      this.checkDisabled(newDates[1]);
      
      // 清空已禁用的未来日期
      this.disabledDays = [];
      for (let date of this.dates) {
        this.checkDisabled(date);
      }
    },
  },
};
</script>

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

相关文章:

  • EasyExcel(二)导出Excel表自动换行和样式设置
  • 修改sshd默认配置,提升安全
  • QT + Opencv 实现灰度模板匹配
  • 快速实现一个快递物流管理系统:实时更新与状态追踪
  • ssh链接飞牛NAS的时候出现WARNING提示无法正常登录!按照这个可以解决
  • 数据结构与算法之二叉树: LeetCode 700. 二叉搜索树中的搜索 (Ts版)
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/10】小测-【第10章 ACL理论和实操考试】解析
  • Golang——channel
  • DS内排—堆排序
  • LeetCode 521最长特殊序列
  • 【STM32-学习笔记-3-】TIM定时器
  • 【C++开源库】Boost.Asio网络库使用介绍
  • 大模型训练(2):内存开销
  • 网络安全-网站协议请求报文(基础篇)
  • NVIDIA Clara平台助力医学影像处理:编程案例与实践探索(下)
  • Word表格内容批量写入Excel
  • 动态规划【打家劫舍】
  • 【python爬虫入门教程13--selenium的自动点击 --小小案例分享】
  • 挖掘用户价值:链动2+1模式、AI智能名片与S2B2C商城小程序的应用研究
  • tensor core实现flash_attn_mma_share_kv源码分析
  • WebSocket、SSE(Server-Sent Events)、HTTP 和 Axios关系总结
  • openEuler安装docker
  • 做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)
  • SpringBoot整合Easy-es