Element日期时间选择器DateTimePicker 实现时分控制

贴一个语雀的地址:DateTimePicker 日期时间选择器 时分处理

el-date-picker

组件网址: https://element.eleme.cn/#/zh-CN/component/datetime-picker
组件方法只能限制日期; 可选择今天及今天之后。
网页截图

现在需求

element的el-date-picker组件实现 只可选择当时之后的时间,包括时分,否则禁用不可选。

时分要怎么做限制?

截图

实现代码

vue2

template

条件写在 takeEffectPickerOptions 和 loseEffectPickerOptions, 日期跟时分分别写方法控制。

<el-form-item label="生效时间" prop="takeEffectTime">
  <el-date-picker
    v-model="addNewForm.takeEffectTime"
    type="datetime"
    placeholder="请选择生效时间"
    style="width: 100%;"
    value-format="yyyy-MM-dd HH:mm:ss"
    :picker-options="takeEffectPickerOptions"
  >
    <!-- :default-time="defaultTimeVal" -->
  </el-date-picker>
  <div class="tooltip">
    <i class="el-icon-warning-outline"></i>不可早于当前时间
  </div>
</el-form-item>

<el-form-item label="失效时间" prop="loseEffectTime">
  <el-date-picker
    v-model="addNewForm.loseEffectTime"
    type="datetime"
    placeholder="请选择失效时间"
    style="width: 100%;"
    value-format="yyyy-MM-dd HH:mm:ss"
    :picker-options="loseEffectPickerOptions"
  >
    <!-- :disabled="!addNewForm.takeEffectTime" -->
  </el-date-picker>
  <div class="tooltip">
    <i class="el-icon-warning-outline"></i>不可早于生效时间
  </div>
</el-form-item>

data()

data() {
    return {
   	  takeEffectSelectableRange: [], // DateTimePicker 时分限制
      loseEffectSelectableRange: []
    }
}

watch

监听生效时间和失效时间的变化(主要监听是否选择当天日期),更新时间选择器的范围。
如果失效时间已填,然后改了生效时间 且 生效时间>失效时间,则失效时间自动设置为跟生效时间一样。this.addNewForm.loseEffectTime = newTakeEffectTime;


 watch: {
  'addNewForm.takeEffectTime': function(newTakeEffectTime) {
    // 知道日期后,动态的设定是否需要什么样的时间范围
    this.takeEffectSelectableRange = this.takeEffectTimeRange(
      newTakeEffectTime
    );
    // 存在失效时间,且 生效时间>失效时间
    if (
      this.addNewForm.loseEffectTime &&
      newTakeEffectTime > this.addNewForm.loseEffectTime
    ) {
      this.addNewForm.loseEffectTime = newTakeEffectTime;
    }
  },
  'addNewForm.loseEffectTime': function(newLoseEffectTime) {
    this.loseEffectSelectableRange = this.loseEffectTimeRange(
      this.addNewForm.loseEffectTime
    );
  }
},

computed

写 takeEffectPickerOptions 和 loseEffectPickerOptions;
disabledDate 控制日期的选择范围, selectableRange 控制时分;

computed: {
  // 生效时间限制,disabledDate控制日期的选择范围, selectableRange 控制时分
  takeEffectPickerOptions() {
    return {
      disabledDate: this.takeEffectDisabledDate,
      selectableRange: this.takeEffectSelectableRange
    };
  },
  // 失效时间限制
  loseEffectPickerOptions() {
    return {
      disabledDate: this.loseEffectDisabledDate,
      selectableRange: this.loseEffectSelectableRange
    };
  }
},

此时,有四个方法:takeEffectDisabledDate,takeEffectSelectableRange,loseEffectDisabledDate,loseEffectSelectableRange
详情看官网 picker-options 的可选参数 disabledDate,和 Time Picker Options 的 selectableRange。

methods 四个方法

methods: {
  // 日期格式化
  dateFormat(time, format = 'YYYY-MM-DD HH:mm:ss') {
    return moment(new Date(time)).format(format);
  },

  takeEffectDisabledDate(time) {
    const currentTime = new Date();
    // 如果选择的时间早于当前时间,禁用它  , - 8.64e7 可以选择今天的
    return time.getTime() < currentTime.getTime() - 8.64e7;
  },

  
  loseEffectDisabledDate(time) {
    let takeEffectTime;
    takeEffectTime = this.addNewForm.takeEffectTime;
    const takeEffectDate = new Date(takeEffectTime);
    takeEffectDate.setHours(0, 0, 0, 0);
    // 如果选择的日期早于生效日期,禁用它
    return time.getTime() < takeEffectDate.getTime();
  },

  // timeRange 用来对当前的时间进行计算,如果是今天的日期,设置只能是此刻的时分以后可选
  takeEffectTimeRange(time) {
    if (time) {
      const currentTime = new Date().getTime();
      const currentDate = this.dateFormat(currentTime, 'YYYY-MM-DD');
      const currentTimeStr = this.dateFormat(currentTime, 'HH:mm:ss');
      const formDate = this.dateFormat(time, 'YYYY-MM-DD');
      // 当天的时候 调整时分限制
      if (currentDate == formDate) {
        return [`${currentTimeStr} - 23:59:59`];
      } else {
        return ['00:00:00 - 23:59:59'];
      }
    }
  },
  
  // timeRange 用来对当前的时间进行计算,如果是生效日期当天,设置只能是生效的时分以后可选
  loseEffectTimeRange(time) {
    if (time) {
      let takeEffectTime;
      takeEffectTime = this.addNewForm.takeEffectTime;
      let currentTakeEffectTime = new Date(takeEffectTime).getTime();
      let currentTakeEffectDate = this.dateFormat(
        currentTakeEffectTime,
        'YYYY-MM-DD'
      );
      let currentTakeEffectTimeStr = this.dateFormat(
        currentTakeEffectTime,
        'HH:mm:ss'
      );
      let formDate = this.dateFormat(time, 'YYYY-MM-DD');
      // 生效当天的时候 调整时分限制
      if (currentTakeEffectDate == formDate) {
        return [`${currentTakeEffectTimeStr} - 23:59:59`];
      } else {
        return ['00:00:00 - 23:59:59'];
      }
    }
  },
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值