antd 的时间选择器禁用


            <RangePicker
              showTime
              allowClear={false}
              value={hackValue || time}
              disabledDate={disabledDate}
              disabledTime={disabledRangeTime}
              onCalendarChange={(val) => setDates(val)}
              onChange={(val) => setTime(val)}
              onOpenChange={onOpenChange}
            />

  const [dates, setDates] = useState([]);
  const [hackValue, setHackValue] = useState<any>();
  const [time, setTime] = useState<any>([
    moment(moment().format('YYYY-MM-DD 00:00:00')),
    moment(),
  ]);
 // 禁用天
  const disabledDate = (current) => {
    const day = current && current > moment();
    if (!dates || dates.length === 0) {
      return day;
    }

    let tooLate;
    if (dates[0] && current) {
      tooLate = current.date() > dates[0].date() + 1;
      if (dates[0].format('HH:mm:ss') === '00:00:00') {
        tooLate = current.date() > dates[0].date();
      }
    }
    const tooEarly = dates[1] && dates[1].diff(current, 'days') > 0;
    return tooEarly || tooLate || day;
  };
 // 禁用时分秒
  const disabledRangeTime = (val, type) => {
    if (dates.length && val) {
      let h = [],
        m = [],
        s = [];
      if (
        type === 'start' &&
        dates[1] &&
        dates[1].date() !== val.date() &&
        dates[1].format('HH:mm:ss') !== '00:00:00'
      ) {
        h = [0, val.hours()];
        if (val.hours() && val.hours() === dates[1].hours()) {
          m = [0, dates[1].minutes()];
          if (val.minutes() && val.minutes() === dates[1].minutes()) {
            s = [0, dates[1].seconds()];
          }
        }
      }
      if (type === 'end' && dates[0] && dates[0].date() !== val.date()) {
        h = [dates[0].hours() + 1, 24];
        if (val.hours() && val.hours() === dates[0].hours()) {
          m = [dates[0].minutes() + 1, 60];
          if (val.minutes() && val.minutes() === dates[0].minutes()) {
            s = [dates[0].seconds(), 60];
          }
        }
      }
      return {
        disabledHours: () => range(...h),
        disabledMinutes: () => range(...m),
        disabledSeconds: () => range(...s),
      };
    }
  };
  const range = (start, end) => {
    const result = [];
    for (let i = start; i < end; i++) {
      result.push(i);
    }
    return result;
  };

  const onOpenChange = (open) => {
    if (open) {
      // setTime([]);
      setHackValue([]);
      setDates([]);
    } else {
      setHackValue(undefined);
    }
  };

 实现只能选择24小时的禁用, 初始时间是当天的零点到当前的时间


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM