<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小时的禁用, 初始时间是当天的零点到当前的时间