欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在 antdv 时间选择器 a-date-picker 中设置自定义日期选择范围(如最近一周、半月、一月)- 用 moment.js 实现

最编程 2024-02-18 22:55:17
...
// 设置不可选择的日期 disabledDate (current) { this.value = undefined switch (this.data.dateRange) { // 近一周 case 'nearWeek': { // 计算今天是这周第几天 周日为一周中的第一天 const weekOfday = parseInt(this.moment().format('d')) // 获取当前周的开始结束时间 const weekStart = this.moment().subtract(weekOfday - 1, 'days') const weekEnd = this.moment().add(7 - weekOfday, 'days') // 设置区间之外的日期不可选 return current < weekStart.subtract(1, 'days') || current > weekEnd } // 近半月 case 'nearHalfMonth': { // 获取本月开始结束时间 const monthStart = this.moment().startOf('month') const monthEnd = this.moment().endOf('month') // 区间开始结束 let start, end // 计算今天是这月第几天 const monthOfday = parseInt(this.moment().format('D')) // 判断是否处于前半月还是后半月 if (monthOfday < 15) { // 前半月区间:1 ~ 15 start = monthStart end = this.moment(start).add('days', 14) } else { // 后半月区间:16 ~ 月末最后一天 start = this.moment(this.moment().format('YYYY-MM') + '-16') end = monthEnd } // 设置区间之外的日期不可选 return current < start || current > end.add('days', 1) } // 近一月 case 'nearMonth': { // 获取本月开始结束时间 const monthStart = this.moment().startOf('month') const monthEnd = this.moment().endOf('month') // 设置区间之外的日期不可选 return current < monthStart || current > monthEnd.add('days', 1) } // 近半年 case 'nearHalfYear': { // 获取今年开始结束时间 const yearStart = this.moment().startOf('year') const yearEnd = this.moment().endOf('year') // 区间开始结束 let start, end // 获取今年天数 const yearDays = this.moment(yearEnd).diff(yearStart, 'days') // 计算今天是今年第几天 const yearOfday = parseInt(this.moment().format('DDD')) // 判断是否处于前半年还是后半年 if (yearOfday < (yearDays / 2)) { // 前半年区间:今年开始时间 ~ 第二季度结束 start = yearStart // 今年开始时间+2个季度-1天,即上半年结束时间(第二季度结束) end = this.moment(yearStart).add('Q', 2).subtract(1, 'days') } else { // 后半年区间:第三季度开始 ~ 年末最后一天 // 今年开始时间+2个季度,即下半年开始时间 start = this.moment(yearStart).add('Q', 2) end = yearEnd } // 设置区间之外的日期不可选 return current < start || current > end } // 近一年 case 'nearYear': { // 获取今年开始结束时间 const yearStart = this.moment().startOf('year') const yearEnd = this.moment().endOf('year') // 设置区间之外的日期不可选 return current < yearStart || current > yearEnd } } return false }