控制选择开始时间后、结束时间只能前后一个月,整体选择时间必须大于等于今年
上代码:
通过配置pickerOptions添加限制:
<template>
<el-date-picker
v-model="valueDate"
type="daterange"
:picker-options="pickerOptions"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd" >
</template>
在pickerOptions中,通过 onPick监听选中的第一个时间,disabledDate实时控制第二个时间的选择范围
<script>
data(){
return{
valueDate:null,
// 选中时间:
choiceDate0: "",
pickerOptions: {
// 配置快捷选中
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
],
onPick: ({ maxDate, minDate }) => {
// 选中的时间
this.choiceDate0 = minDate.getTime();
if (maxDate) {
this.choiceDate0 = "";
}
},
disabledDate: (time) => {
// 判断:
// 只能选择当前时间的前三个月的和当前之前的
var threeDate = new Date();
threeDate.setMonth(threeDate.getMonth() - 3)
return time.getTime()<threeDate.getTime() || time.getTime()> new Date().getTime()
/*********其他的判断(和上面二选一)**************/
// 只可以选择前后一个月时间,只能选择今年的时间,大于今天的不可选
// 获取今年的时间
let this_year_time=new Date(new Date().getFullYear()+'/01/01')
// 选中时间的Date
let choiceDateTime = new Date(this.choiceDate0).getTime();
// 一个月前的日期
const minTime = new Date(choiceDateTime).setMonth(
new Date(choiceDateTime).getMonth() - 1
);
// 一个月后的日期
const maxTime = new Date(choiceDateTime).setMonth(
new Date(choiceDateTime).getMonth() + 1
);
const min = minTime;
const max = maxTime;
// 判断:
// 有选择时间时
if (this.choiceDate0) {
// 大于选择第一时间下个月的时间不可选,大于今天不可选
if(time.getTime() > max || time.getTime()> new Date().getTime()){
return true
}
// 小于选择第一时间上个月的时间不可选、小于今年的时间不可选
if(time.getTime() < this_year_time || time.getTime() < min){
return true
}
}
// 小于今年的时间不可选,大于今天的不可选
return time.getTime() < this_year_time || time.getTime()> new Date().getTime()
},
},
}
}
</script>