Vue+Element 日期选择器 选择范围限制

2019-07-01  本文已影响0人  嗜梦lin

在业务中使用日期选择时,通常会遇到要限制日期范围的情况,这里就来看一下element的日期限制是如何实现的。(Element日期选择器:https://element.eleme.cn/#/zh-CN/component/date-picker

在文档中我们可以找到可以通过设置 picker-options 属性来设置当前时间日期选择器特有的选项,该属性具体参数如下图:

picker-option参数
我们可以看出,可以通过设置 disabledDate 来禁用范围外的时间选项,就可以限制可选的范围了。而 disabledDate 是一个函数,返回boolean类型。
接下来我们就写一个只能选择 今天之后(包括今天) 的日期选择器的场景。
<template>
  <div class="wrapper">
    <el-form ref="form" :inline="true" :model="form" status-icon label-width="120px" class="form">
      <el-form-item label="今天之后的时间">
        <el-date-picker v-model="form.time" type="date" placeholder="选择日期" :picker-options="pickerOption"/>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  name: '',
  data() {
    return {
      form: {
        time: null,
      },
      // timePicker
      pickerOption: {
        disabledDate(time) {
          return time.getTime() < Date.now() - 8.64e7;
        },
      },
    };
  },
  computed: {},
  methods: {},
};
</script>

<style lang="scss" scoped>
</style>
效果图

现在是6月28日,那个 8.64e7 就是 24 * 60 * 60 * 1000,也就是一天的时间,上面如果想不包含今天,就把 -8.64e7去掉。
这里建议把 pickerOption 写在计算属性中,因为在有些情况下需要通过其他的时间来定范围,所以写在computed中更好。

最后再写一个常用的两个时间互相约束的例子,开始时间必须比结束时间小:

<template>
  <el-form ref="form" :model="form" label-width="80px">
    <el-form-item label="开始时间">
      <el-date-picker v-model="form.startTime" type="date" placeholder="选择日期" :picker-options="startTimePicker"/>
    </el-form-item>
    <el-form-item label="结束时间">
      <el-date-picker v-model="form.endTime" type="date" placeholder="选择日期" :picker-options="endTimePicker"/>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  name: '',
  data() {
    return {
      form: {
        startTime: null,
        endTime: null,
      },
    };
  },
  computed: {
    startTimePicker() {
      return {
        disabledDate: time => (this.form.endTime ? time.getTime() > new Date(this.form.endTime).getTime() : false),
      };
    },
    endTimePicker() {
      return {
        disabledDate: time => (this.form.startTime ? time.getTime() < new Date(this.form.startTime).getTime() : false),
      };
    },
  },
  methods: {},
};
</script>

<style lang="scss" scoped>
</style>
效果图
上一篇下一篇

猜你喜欢

热点阅读