diff --git a/components/date-picker/demo/select-in-range.tsx b/components/date-picker/demo/select-in-range.tsx index f503d39b51..3d02a8457d 100644 --- a/components/date-picker/demo/select-in-range.tsx +++ b/components/date-picker/demo/select-in-range.tsx @@ -1,24 +1,52 @@ import React from 'react'; import { DatePicker, Space, Typography } from 'antd'; import type { DatePickerProps } from 'antd'; +import type { Dayjs } from 'dayjs'; const { RangePicker } = DatePicker; +const getYearMonth = (date: Dayjs) => date.year() * 12 + date.month(); + // Disabled 7 days from the selected date -const disabled7DaysDate: DatePickerProps['disabledDate'] = (current, { from }) => { +const disabled7DaysDate: DatePickerProps['disabledDate'] = (current, { from, type }) => { if (from) { - return Math.abs(current.diff(from, 'days')) >= 7; + const minDate = from.add(-6, 'days'); + const maxDate = from.add(6, 'days'); + + switch (type) { + case 'year': + return current.year() < minDate.year() || current.year() > maxDate.year(); + + case 'month': + return ( + getYearMonth(current) < getYearMonth(minDate) || + getYearMonth(current) > getYearMonth(maxDate) + ); + + default: + return Math.abs(current.diff(from, 'days')) >= 7; + } } return false; }; // Disabled 6 months from the selected date -const disabled6MonthsDate: DatePickerProps['disabledDate'] = (current, { from }) => { +const disabled6MonthsDate: DatePickerProps['disabledDate'] = (current, { from, type }) => { if (from) { - const curMonth = current.year() * 12 + current.month(); - const fromMonth = from.year() * 12 + from.month(); - return Math.abs(fromMonth - curMonth) >= 6; + const minDate = from.add(-5, 'months'); + const maxDate = from.add(5, 'months'); + + switch (type) { + case 'year': + return current.year() < minDate.year() || current.year() > maxDate.year(); + + default: + return ( + getYearMonth(current) < getYearMonth(minDate) || + getYearMonth(current) > getYearMonth(maxDate) + ); + } } return false;