elementUI中分开的时间日期选择组件,控制日期的禁用

javascript 复制代码
<el-date-picker v-model="query.startTime" type="datetime" :picker-options="startPickerOptions" format="yyyy-MM-dd HH时" popper-class="date-picker" placeholder="选择日期时间"></el-date-picker>
<el-date-picker v-model="query.endTime" type="datetime" :picker-options="endPickerOptions" format="yyyy-MM-dd HH时" popper-class="date-picker" placeholder="选择日期时间"> </el-date-picker>
javascript 复制代码
 data() {
   return {
   query: {
        startTime: "",
        endTime: "",
      },
      startPickerOptions: {
        disabledDate: (time) => {
          if (this.query.endTime) {
            // 根据结束时间,向前推5天
            let timeStart = getRequiresTime(
              new Date(this.query.endTime),
              "day",
              -5
            );
            this.startPickerOptions.selectableRange = "02:00:00 - 23:59:59";
            return (
              time.getTime() > new Date(this.query.endTime).getTime() ||
              time.getTime() < new Date(timeStart).getTime()
            );
          }
        },
        selectableRange: "00:00:00 - 23:59:59",
      },
      endPickerOptions: {
        disabledDate: (time) => {
          if (this.query.startTime) {
            // 根据开始时间,向后推5天
            let timeEnd = getRequiresTime(
              new Date(this.query.startTime),
              "day",
              5
            );
            this.endPickerOptions.selectableRange = "04:00:00 - 23:59:59";
            return (
              new Date(this.query.startTime).getTime() > time.getTime() ||
              time.getTime() > new Date(timeEnd).getTime()
            );
          }
        },
        selectableRange: "00:00:00 - 23:59:59",
      },
    }
}
javascript 复制代码
// 半年,1年,3年前后的时间获取
export function getRequiresTime(time, type = null, number = 0) {
  var nowdate = new Date(time);
  switch (type) {
    case "day": //取number天前、后的时间
      nowdate.setTime(nowdate.getTime() + (24 * 3600 * 1000) * number);
      var y = nowdate.getFullYear();
      var m = nowdate.getMonth() + 1;
      var d = nowdate.getDate();
      var retrundate = y + '-' + (m >= 10 ? m : '0' + m) + '-' + (d >= 10 ? d : '0' + d);
      break;
    case "week": //取number周前、后的时间
      var weekdate = new Date(nowdate + (7 * 24 * 3600 * 1000) * number);
      var y = weekdate.getFullYear();
      var m = weekdate.getMonth() + 1;
      var d = weekdate.getDate();
      var retrundate = y + '-' + (m >= 10 ? m : '0' + m) + '-' + (d >= 10 ? d : '0' + d);
      break;
    case "month": //取number月前、后的时间
      nowdate.setMonth(nowdate.getMonth() + number);
      var y = nowdate.getFullYear();
      var m = nowdate.getMonth() + 1;
      var d = nowdate.getDate();
      var retrundate = y + '-' + (m >= 10 ? m : '0' + m) + '-' + (d >= 10 ? d : '0' + d);
      break;
    case "year": //取number年前、后的时间
      nowdate.setFullYear(nowdate.getFullYear() + number);
      var y = nowdate.getFullYear();
      var m = nowdate.getMonth() + 1;
      var d = nowdate.getDate();
      var retrundate = y + '-' + (m >= 10 ? m : '0' + m) + '-' + (d >= 10 ? d : '0' + d);
      break;
    default: //取当前时间
      var y = nowdate.getFullYear();
      var m = nowdate.getMonth() + 1;
      var d = nowdate.getDate();
      var retrundate = y + '-' + (m >= 10 ? m : '0' + m) + '-' + (d >= 10 ? d : '0' + d);
  }
  return retrundate;
}
相关推荐
To_OC1 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus2 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮2 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635073 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕4 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a1117765 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen5 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz6 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒6 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱6 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端