ant design vue时间控件a-date-picker自定义时间段范围

文章介绍了在前端项目中如何实现一个时间范围选择器,该选择器限制开始和结束时间相差不能超过30天,并且不允许选择今天之后的日期。通过`disabledDate`属性和`moment.js`库进行日期处理,实现了这一功能,并分享了代码示例和遇到的问题及解决方案。
摘要由CSDN通过智能技术生成

最近在做项目的时候,需求增加了一个时间范围选择的限制,开始时间和结束时间之间相差不能大于30天,且今天之后的日期禁选

感谢参考文章:https://blog.csdn.net/u014582342/article/details/127580384

目前的实现效果:

直接上代码:


<a-range-picker
   value-format="YYYY-MM-DD"
   :disabledDate="disabledDateHandler"
   @calendarChange="(dates) => (selectDateTime = dates[0])"
   @change="handleRangeTimeChange"
   @openChange="() => (selectDateTime = '')"
   :ranges="timeScopedPre"
 />

属性解释:

  1. value-format : 可选,绑定值的格式,对 value、defaultValue、defaultPickerValue 起作用。不指定则绑定值为 moment 对象,String格式,主要是时间的格式

  1. disabledDate :不可选择的日期 (currentDate: moment) => boolean (日期当中的每一天都会调用这个函数)

  1. ranges: 预设时间范围快捷选择 可以设定快捷选择按钮

  1. calendarChange :待选日期发生变化的回调,每一次点击选择日期,就会调用一下这一个函数,当前场景的使用目的是为了记录选择的第一个时间selectDateTime

  1. openChange:打开时间选择框的时候执行的回调,每次打开的时候清除记录的第一个时间selectDateTime

import moment from "moment";
data() {
    return {
     selectDateTime: '',
      timeScopedPre: {
        近七日: [moment().subtract(6, 'd'), moment()],//加上今天一共是七天,subtract方法是传6,往后推6天
        近14日: [moment().subtract(13, 'd'), moment()],
        近30日: [moment().subtract(29, 'd'), moment()]
      }
}
methods:{
    //时间范围变化的时间执行,清除记录的第一个时间
    handleRangeTimeChange(date, dateString) {
      this.selectDateTime = ''
      this.$emit('handleRangeTimeChange', dateString)
    },
    //禁选时间的处理,这一步很关键
    disabledDateHandler(current) {
      if (this.selectDateTime) {
        //这里实现下面功能
        //!!!只能选取30天,这里需要填写29,不然会出现多出来了一天的情况
        //和禁止选择今天之后的日期

        // !!!this.selectDateTime + ' 23:59:59' 这个必须拼接23:59:59 否则第一次选择只能往后选择29天
        return (
          current > this.$moment() ||
          current > this.$moment(this.selectDateTime + ' 23:59:59').add(29, 'd') ||
          current < this.$moment(this.selectDateTime).subtract(29, 'd')
        )
      } else {
        //这里实现下面功能
        //禁止选择今天之后的日期
        return current > this.$moment()
      }
    }
}

参考了一些禁用时间范围的文章,但是期间自己也踩到很多坑,希望我的总结能对你们有用!

这是第一次发技术相关的文章,有技术问题的朋友也欢迎私聊我,一起交流~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值