Vue+Element 日期选择器 选择范围限制
2019-07-01 本文已影响0人
嗜梦lin
在业务中使用日期选择时,通常会遇到要限制日期范围的情况,这里就来看一下element的日期限制是如何实现的。(Element日期选择器:https://element.eleme.cn/#/zh-CN/component/date-picker)
在文档中我们可以找到可以通过设置 picker-options 属性来设置当前时间日期选择器特有的选项,该属性具体参数如下图:
我们可以看出,可以通过设置 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>
效果图