iView的DatePicker日期选择器,设置日期选择区间

需求:如若今天是2021-11-8,那么时间区间是 2021-10-26 ~ 2021-11-8共14天,选择的时间只能在14天中,并且开始时间离结束时间不能超过7天
在这里插入图片描述

1、html 结构部分

<div class="datePicker">
     <DatePicker
       :editable="false"
       :clearable="false"
       type="date"
       format="yyyy-MM-dd"
       placeholder="开始日期"
       style="width: 96px"
       :value="startDate"
       v-model="startDate"
       :options="startTimeOptions"
       @on-change="startTimeChange"
     ></DatePicker>
     <img style="height:30px" src="../../assets/img/contentImg/arrowLeft.png" alt="" />
     <DatePicker
       :editable="false"
       :clearable="false"
       type="date"
       format="yyyy-MM-dd"
       placeholder="结束日期"
       style="width: 96px"
       :options="endTimeOptions"
       :value="endDate"
       v-model="endDate"
       @on-change="endTimeChange"
     ></DatePicker>
     <Icon style="margin-right:5px" type="md-calendar" color="#d5d5d5" size="20" />
</div>

2、下载并在mian.js中引入moment,挂载到原型中

//引入moment
import moment from "moment";
Vue.prototype.$moment = moment;

3、定义初始规则和参数

      startDate: "", // 开始日期
      endDate: "", // 结束日期
      startDate0: "",
      endDate0: "",
      startTimeOptions: {
        disabledDate(date) {
          return date && date.valueOf() > Date.now();
        }
      }, // 开始日期设置
      endTimeOptions: {
        disabledDate(date) {
          return date && date.valueOf() > Date.now();
        }
      }, // 结束日期设置

4、改变时间时触发函数

    // 一开始就显示7天前到今天的时间
    // 最近七日
    lastSevenDay() {
      let aData = new Date();
      // 获取当天的年月日
      let todayDate = aData.getFullYear() + "-" + (aData.getMonth() + 1 > 9 ? aData.getMonth() + 1 : "0" + (aData.getMonth() + 1)) + "-" + (aData.getDate() > 9 ? aData.getDate() : "0" + aData.getDate());
      // 获取七天前的日期
      let time = new Date().getTime() - 6 * 24 * 60 * 60 * 1000;
      let lastThreeDay = new Date(time);
      let month = lastThreeDay.getMonth();
      let day = lastThreeDay.getDate();
      lastThreeDay = lastThreeDay.getFullYear() + "-" + (month >= 9 ? month + 1 : "0" + (month + 1)) + "-" + (day >= 9 ? day : "0" + day);
      // console.log(477, lastThreeDay)
      this.startDate = lastThreeDay;
      this.endDate = todayDate;
      this.startDate0 = lastThreeDay;
      this.endDate0 = todayDate;
      // console.log(1108, this.startDate, this.endDate);
      let endTime = this.endDate ? new Date(this.endDate).valueOf() : "";
      let startTime = new Date().valueOf() - 14 * 1000 * 60 * 60 * 24;
      this.startTimeOptions = {
        disabledDate(date) {
          if (endTime) {
            return (
              (date && date.valueOf() >= endTime) ||
              (date && date.valueOf() <= startTime)
            );
          } else {
            return date && date.valueOf() > Date.now();
          }
        }
      }
    },
    // 改变开始日期
    startTimeChange(value) {
      // console.log(value, this.startDate);
      if (new Date(this.endDate).getTime() - new Date(value).getTime() > 7 * 24 * 1000 * 60 * 60 ) {
        this.startDate = this.startDate0;
        // console.log(901, this.startDate, this.endDate);
        this.endDate = this.$moment(new Date(this.endDate).getTime())
          .startOf("day")
          .format("YYYY-MM-DD");
          console.log(this.$moment(new Date(this.endDate).getTime()).startOf("day").format("YYYY-MM-DD"));
        console.log(905, this.startDate, this.endDate);
        this.$Message.warning({
          content: "所选时间区间超过七天,请重新选择",
          duration: 3,
          closable: true
        });
        return false;
      } else {
        this.startDate0 = value;
        this.startDate = value;
        this.endDate = this.$moment(new Date(this.endDate).getTime())
          .startOf("day")
          .format("YYYY-MM-DD");
      }
      // console.log(912, this.startDate, this.endDate);
      // 获取数据部分
      this.GetQueryRoomModelList();
      if (this.$refs.getTimeLine) {
        this.$refs.getTimeLine.fullDate =
          (new Date(this.startDate).getTime() - 1 * 24 * 1000 * 60 * 60) / 1000;
        // this.$refs.getTimeLine.startValue = this.$moment(
        //   new Date(this.startDate).getTime() - 1 * 24 * 1000 * 60 * 60
        // )
        //   .startOf("day")
        //   .format("YYYY-MM-DD");
        this.$refs.getTimeLine.startValue = this.startDate;
        this.$refs.getTimeLine.GetRoomAiSupervisionsList();
        this.$refs.getTimeLine.getBackupTimeline(1);
      }
      // console.log(912, value);
      // 重新制定结束时间规则
      this.endTimeOptions = {
        disabledDate: date => {
          let startTime = this.startDate
            ? new Date(this.startDate).valueOf() - 1 * 24 * 60 * 60 * 1000
            : "";
          // return (date && 60 * 60 * 24 * 2 * 1000 < date.valueOf() < startTime)
          return (
            date && (Date.now() < date.valueOf() || date.valueOf() < startTime)
          ); // 结束时间大于等于开始时间
        }
      };
    },
    // 改变结束日期
    endTimeChange(value) {
      // console.log(this.endDate);
      if (
        new Date(value).getTime() - new Date(this.startDate).getTime() >
        7 * 24 * 1000 * 60 * 60
      ) {
        this.endDate = this.endDate0;
        // console.log(950, this.endDate, this.startDate);
        this.startDate = this.$moment(new Date(this.startDate).getTime())
          .startOf("day")
          .format("YYYY-MM-DD");
        // console.log(954, this.endDate, this.startDate);
        this.$Message.warning({
          content: "所选时间区间超过七天,请重新选择",
          duration: 3,
          closable: true
        });
        return false;
      } else {
        this.endDate0 = value;
        this.endDate = value;
        this.startDate = this.$moment(new Date(this.startDate).getTime())
          .startOf("day")
          .format("YYYY-MM-DD");
      }
      // console.log(957, this.endDate, this.startDate);
      // 获取数据部分
      this.GetQueryRoomModelList();
      if (this.$refs.getTimeLine) {
        this.$refs.getTimeLine.binlogDate =
          (new Date(this.endDate).getTime() + 1 * 24 * 1000 * 60 * 60) / 1000;
        // this.$refs.getTimeLine.endValue = this.$moment(
        //   new Date(this.endDate).getTime() + 1 * 24 * 1000 * 60 * 60
        // )
        //   .startOf("day")
        //   .format("YYYY-MM-DD");
        this.$refs.getTimeLine.endValue = this.endDate;
        // console.log(this.startDate);
        this.$refs.getTimeLine.GetRoomAiSupervisionsList();
        this.$refs.getTimeLine.getBackupTimeline(1);
      }
      // 重新制定开始时间规则
      let endTime = this.endDate ? new Date(this.endDate).valueOf() : "";
      let startTime = new Date().valueOf() - 14 * 1000 * 60 * 60 * 24;
      this.startTimeOptions = {
        disabledDate(date) {
          if (endTime) {
            return (
              (date && date.valueOf() >= endTime) ||
              (date && date.valueOf() <= startTime)
            );
          } else {
            return date && date.valueOf() > Date.now();
          }
        }
      };
    },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值