需要用element ui的日期选择器组件实现日期选择限制
1.只能选择本年范围内时间
2.结束时间大于开始时间
3.结束时间的后一天不能为29,30,31号(以确保下一个时段开始时间不为月末)
- html部分
<el-date-picker
class="datepicker"
v-model="oneStart"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsOneStart"
:clearable=false
format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-date-picker
class="datepicker"
v-model="oneEnd"
type="date"
placeholder="选择日期"
:picker-options="pickerOptionsOneEnd"
:clearable=false
format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
- js中data(){ return{}}部分
data() {
return {
oneStart:'',
oneEnd:'',
dateDisabled:[],
pickerOptionsOneStart: {//结束时间不能大于开始时间
disabledDate: (time) => {
var time=new Date(time);
var year=new Date().getFullYear();
if(this.oneEnd != ""){
let minDate =new Date(year,0,1).getTime();
let maxDate =new Date(new Date(this.oneEnd)-24*60*60*1000).getTime();
return time.getTime() < minDate||time.getTime() > maxDate||this.dateDisabled.indexOf(time.getTime())!=-1;//如果日期在禁用数组里则禁止选择
}else{
let minDate =new Date(year,0,1).getTime();
let maxDate =new Date(year,11,31 ).getTime();
return time.getTime() < minDate||time.getTime() > maxDate||this.dateDisabled.indexOf(time.getTime())!=-1;
}
}
},
pickerOptionsOneEnd: {//结束时间不能大于开始时间
disabledDate: (time) => {
var time=new Date(time);
var year=new Date().getFullYear();
if (this.oneStart != "") {
let minDate =new Date(this.oneStart).getTime();
let maxDate =new Date(year,11,31 ).getTime();
return time.getTime() < minDate||time.getTime() > maxDate||this.dateDisabled.indexOf(time.getTime())!=-1;
}else{
let minDate =new Date(year,0,1).getTime();
let maxDate =new Date(year,11,31 ).getTime();
return time.getTime() < minDate||time.getTime() > maxDate||this.dateDisabled.indexOf(time.getTime())!=-1;
}
}},
}
},
- 写一个获取每月最后几天的方法,由于2月月末可能为28号,所以要进行一下判断
methods: {
//获取禁用的日期
getdateDisabled(){
var year=new Date().getFullYear();
var days=[];
for(var month = 0; month < 12; month++){
let day= new Date(year, month + 1, 0).getDate();//获取每月天数
days.push(day);
}
for(var i = 0; i < days.length; i++){
if (days[i]>28){
for (var j = 28; j < days[i]; j++){
this.dateDisabled.push(new Date(year,i,j ).getTime())
}
}
}
},
},
- 设置页面加载即调用getdateDisabled函数,获取禁用的日期数组
mounted() {
this.getdateDisabled();
}
本人菜鸟一枚,这个方法比较麻烦,但是能用,如果有什么别的好的方法请告诉我,大家一起交流 ^ _ ^