Antd DatePicker 限制日期 和 时间

碰到的需求: 在DatePicker组件中限制时间到具体时间段内(限制到时分)

效果:

                                     

DatePicker 限制日期不麻烦,直接使用disabledDate属性就可以实现,但如果有跨天的时间限制就麻烦些,需要我们处理一些逻辑。

可以用disabledTime去限制时分秒不过要注意我们要限制的是临界的那天,其他天不做处理

如果是像上面限制开始结束时间可以看这里  代码   只有替换beginTime,endTime就可以重新定范围

注意: 我这里只限制到 小时和分钟,如还需要限制到秒需要自己加一些逻辑

    // jsx部分   
    <DatePicker
      showTime={{
        format: "HH:mm"
      }}
      format="YYYY-MM-DD HH:mm"
      disabledDate={date =>
        date > moment(endTime).endOf("day") ||
        date <= moment(beginTime).startOf("day")
      }
      disabledTime={disabledTime}
    />
  const range = (start, end) => {
    const result = [];
    for (let i = start; i < end; i++) {
      result.push(i);
    }
    return result;
  };
  
  //时间限制
  const disabledTime = dateTime => {
    if (moment(endTime).isSame(moment(beginTime), "day")) {
      if (moment(endTime).isSame(moment(beginTime), "hour")) {
        return {
          disabledHours: () => {
            let ranges = range(0, 24);
            ranges.splice(moment(beginTime).hour(), 1);
            return ranges;
          },
          disabledMinutes: () => [
            ...range(0, moment(beginTime).minute()),
            ...range(moment(endTime).minute() + 1, 60)
          ]
        };
      } else {
        return {
          disabledHours: () => [
            ...range(0, moment(beginTime).hour()),
            ...range(moment(endTime).hour() + 1, 24)
          ],
          disabledMinutes: () => {
            if (moment(dateTime).isSame(moment(beginTime), "hour"))
              return range(0, moment(beginTime).minute());
            if (moment(dateTime).isSame(moment(endTime), "hour"))
              return range(moment(endTime).minute() + 1, 60);
            return [];
          }
        };
      }
    } else {
      if (moment(dateTime).isSame(moment(beginTime), "day")) {
        return {
          disabledHours: () => range(0, moment(beginTime).hour()),
          disabledMinutes: () =>
            moment(dateTime).isSame(moment(beginTime), "hour")
              ? range(0, moment(beginTime).minute())
              : []
        };
      }
      if (moment(dateTime).isSame(moment(endTime), "day")) {
        return {
          disabledHours: () => range(moment(endTime).hour() + 1, 24),
          disabledMinutes: () =>
            moment(dateTime).isSame(moment(endTime), "hour")
              ? range(moment(endTime).minute() + 1, 60)
              : []
        };
      }
    }
  };

21/8/12更新

添加只限制一边时间的逻辑,只需beginTime、endTime中不需要的值设置为null即可

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值