You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.9 KiB
68 lines
1.9 KiB
import React from 'react';
|
|
import { DatePicker, Space } from 'antd';
|
|
import type { RangePickerProps } from 'antd/es/date-picker';
|
|
import dayjs from 'dayjs';
|
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
|
|
dayjs.extend(customParseFormat);
|
|
|
|
const { RangePicker } = DatePicker;
|
|
|
|
const range = (start: number, end: number) => {
|
|
const result = [];
|
|
for (let i = start; i < end; i++) {
|
|
result.push(i);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
// eslint-disable-next-line arrow-body-style
|
|
const disabledDate: RangePickerProps['disabledDate'] = (current) => {
|
|
// Can not select days before today and today
|
|
return current && current < dayjs().endOf('day');
|
|
};
|
|
|
|
const disabledDateTime = () => ({
|
|
disabledHours: () => range(0, 24).splice(4, 20),
|
|
disabledMinutes: () => range(30, 60),
|
|
disabledSeconds: () => [55, 56],
|
|
});
|
|
|
|
const disabledRangeTime: RangePickerProps['disabledTime'] = (_, type) => {
|
|
if (type === 'start') {
|
|
return {
|
|
disabledHours: () => range(0, 60).splice(4, 20),
|
|
disabledMinutes: () => range(30, 60),
|
|
disabledSeconds: () => [55, 56],
|
|
};
|
|
}
|
|
return {
|
|
disabledHours: () => range(0, 60).splice(20, 4),
|
|
disabledMinutes: () => range(0, 31),
|
|
disabledSeconds: () => [55, 56],
|
|
};
|
|
};
|
|
|
|
const App: React.FC = () => (
|
|
<Space direction="vertical" size={12}>
|
|
<DatePicker
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
disabledDate={disabledDate}
|
|
disabledTime={disabledDateTime}
|
|
showTime={{ defaultValue: dayjs('00:00:00', 'HH:mm:ss') }}
|
|
/>
|
|
<DatePicker picker="month" disabledDate={disabledDate} />
|
|
<RangePicker disabledDate={disabledDate} />
|
|
<RangePicker
|
|
disabledDate={disabledDate}
|
|
disabledTime={disabledRangeTime}
|
|
showTime={{
|
|
hideDisabledOptions: true,
|
|
defaultValue: [dayjs('00:00:00', 'HH:mm:ss'), dayjs('11:59:59', 'HH:mm:ss')],
|
|
}}
|
|
format="YYYY-MM-DD HH:mm:ss"
|
|
/>
|
|
</Space>
|
|
);
|
|
|
|
export default App;
|
|
|