vue3+ant design 实现月份区间选择限制
·
要实现的效果就是禁用当前月份以后的日期,并实现动态选择月份,最多只能选择12个月
先看实现效果
禁用当前月份以后的日期

动态实现选择最多12个月的区间

实现过程:
我们查找ant的api,可以找到禁用日期的disabledDate和选择第一个就会触发的函数calendarChange
body代码:
<a-col :xl="6" :lg="12" :md="12" :sm="24" :xs="24">
<a-form-item label="统计周期">
<a-range-picker
picker="month"
style="margin-left: 20px"
:disabled-date="disabledStartDateMonth"
@change="changeMonth"
@calendarChange="changeMonth2"
v-model:value="selectedRange"
/>
</a-form-item>
</a-col>
js代码:
禁用日期的函数
const time = ref(new Date()); // 获取当前日期
let time1 = ref('1999-09'); // 给time1一个初始值 ,主要是用来接收我点了时间选择框的第一个值的时候
// 日期限制
const disabledStartDateMonth = (cur) => { // cur可以打印一下,可以看见是时间列表
var t = time.value;
if (time1.value == '1999-09') { // 判断初始值有没有变化,没有变化则没有选择日期,就只做限制大于今天的日期不可选的限制
if (t >= cur) { // 今天大于了cur这个时间列表中值,大于了的值就禁用,否则可选
return false;
} else {
return true;
}
} else {
if (time1.value >= cur) { // 初始值变化了,就用time1去跟时间列表做比较
return false;
} else {
return true;
}
}
};
计算12个月区间的函数:
const changeMonth2 = (date, dateString) => { // 自带的两个值
console.log(date, dateString); // 打印结果可以看到dateString是我们需要的,它是一个数组的表现形式
if (time1.value != dateString[0]) { //我们要取的是选择的第一个时间,判断我们的初始值是否跟他相等,不相等说明是重新赋值
time1.value = dateString[0];
time1.value = new Date(time1.value).setFullYear( // 这一段的主要是把选择的一个时间往后加一年,就是选择12月的关键所在,先取出年份+1,再设置年份给我们的time1这个变量
new Date(time1.value).getFullYear() + 1
);
console.log(time1.value);// 打印这里可以看到我们得到是一个毫秒数的时间
let time2 = new Date().getTime();// 获取当前时间的毫秒数
if (time1.value > time2) { // 我们加上一年的时间也不能比当前时间大,所以要做一个判断,如果比当前时间大,就等于当前时间
time1.value = time2;
}
time1.value = new Date(time1.value); // 再把它转换为正常的时间格式
}
disabledStartDateMonth(); // 再次触发禁用时间,来做只能选择12个月的限制
// time.value = dateString[0];
// disabledStartDateMonth();
// if (t.value.length == 0) {
// }
};
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)