diff --git a/src/generate/dateFns.ts b/src/generate/dateFns.ts index 196f8d7ec..7253c38de 100644 --- a/src/generate/dateFns.ts +++ b/src/generate/dateFns.ts @@ -7,6 +7,7 @@ import { getHours, getMinutes, getSeconds, + getMilliseconds, addYears, addMonths, addDays, @@ -16,6 +17,7 @@ import { setHours, setMinutes, setSeconds, + setMilliseconds, isAfter, isValid, getWeek, @@ -51,6 +53,7 @@ const generateConfig: GenerateConfig = { getHour: date => getHours(date), getMinute: date => getMinutes(date), getSecond: date => getSeconds(date), + getMillisecond: date => getMilliseconds(date), // set addYear: (date, diff) => addYears(date, diff), @@ -62,6 +65,7 @@ const generateConfig: GenerateConfig = { setHour: (date, hour) => setHours(date, hour), setMinute: (date, minute) => setMinutes(date, minute), setSecond: (date, second) => setSeconds(date, second), + setMillisecond: (date, millisecond) => setMilliseconds(date, millisecond), // Compare isAfter: (date1, date2) => isAfter(date1, date2), diff --git a/src/generate/dayjs.ts b/src/generate/dayjs.ts index b1d888ce7..32f16a46d 100644 --- a/src/generate/dayjs.ts +++ b/src/generate/dayjs.ts @@ -59,6 +59,7 @@ const generateConfig: GenerateConfig = { getHour: date => date.hour(), getMinute: date => date.minute(), getSecond: date => date.second(), + getMillisecond: date => date.millisecond(), // set addYear: (date, diff) => date.add(diff, 'year'), @@ -70,6 +71,7 @@ const generateConfig: GenerateConfig = { setHour: (date, hour) => date.hour(hour), setMinute: (date, minute) => date.minute(minute), setSecond: (date, second) => date.second(second), + setMillisecond: (date, millisecond) => date.millisecond(millisecond), // Compare isAfter: (date1, date2) => date1.isAfter(date2), diff --git a/src/generate/index.ts b/src/generate/index.ts index b0cd56d5e..4c6fb8ee7 100644 --- a/src/generate/index.ts +++ b/src/generate/index.ts @@ -1,6 +1,7 @@ export type GenerateConfig = { // Get getWeekDay: (value: DateType) => number; + getMillisecond: (value: DateType) => number; getSecond: (value: DateType) => number; getMinute: (value: DateType) => number; getHour: (value: DateType) => number; @@ -21,6 +22,7 @@ export type GenerateConfig = { setHour: (value: DateType, hour: number) => DateType; setMinute: (value: DateType, minute: number) => DateType; setSecond: (value: DateType, second: number) => DateType; + setMillisecond: (value: DateType, second: number) => DateType; // Compare isAfter: (date1: DateType, date2: DateType) => boolean; diff --git a/src/generate/moment.ts b/src/generate/moment.ts index 62a0538fc..fa6ab0a78 100644 --- a/src/generate/moment.ts +++ b/src/generate/moment.ts @@ -21,6 +21,7 @@ const generateConfig: GenerateConfig = { getHour: date => date.hour(), getMinute: date => date.minute(), getSecond: date => date.second(), + getMillisecond: date => date.millisecond(), // set addYear: (date, diff) => { @@ -59,6 +60,10 @@ const generateConfig: GenerateConfig = { const clone = date.clone(); return clone.second(second); }, + setMillisecond: (date, millisecond) => { + const clone = date.clone(); + return clone.millisecond(millisecond); + }, // Compare isAfter: (date1, date2) => date1.isAfter(date2), diff --git a/src/panels/DatetimePanel/index.tsx b/src/panels/DatetimePanel/index.tsx index eb3faccc9..4c284127f 100644 --- a/src/panels/DatetimePanel/index.tsx +++ b/src/panels/DatetimePanel/index.tsx @@ -141,6 +141,10 @@ function DatetimePanel(props: DatetimePanelProps) { selectedDate, generateConfig.getSecond(timeProps.defaultValue), ); + selectedDate = generateConfig.setMillisecond( + selectedDate, + generateConfig.getMillisecond(timeProps.defaultValue), + ); } else if (source === 'time' && !value && defaultValue) { selectedDate = generateConfig.setYear( selectedDate, diff --git a/tests/generate.spec.tsx b/tests/generate.spec.tsx index 3e1e15bb1..809ca2e39 100644 --- a/tests/generate.spec.tsx +++ b/tests/generate.spec.tsx @@ -9,7 +9,7 @@ import { GenerateConfig } from '../src/generate'; describe('Picker.Generate', () => { beforeAll(() => { - MockDate.set(getMoment('1990-09-03 01:02:03').toDate()); + MockDate.set(getMoment('1990-09-03 01:02:03.111').toDate()); }); afterAll(() => { @@ -29,6 +29,7 @@ describe('Picker.Generate', () => { const fixedDate = generateConfig.getFixedDate('1990-09-03'); const endDate = generateConfig.getEndDate(fixedDate); expect(generateConfig.getWeekDay(now)).toEqual(1); + expect(generateConfig.getMillisecond(now)).toEqual(111); expect(generateConfig.getSecond(now)).toEqual(3); expect(generateConfig.getMinute(now)).toEqual(2); expect(generateConfig.getHour(now)).toEqual(1); @@ -51,9 +52,10 @@ describe('Picker.Generate', () => { date = generateConfig.setHour(date, 2); date = generateConfig.setMinute(date, 3); date = generateConfig.setSecond(date, 5); + date = generateConfig.setMillisecond(date, 333); - expect(generateConfig.locale.format('en_US', date, 'YYYY-MM-DD HH:mm:ss')).toEqual( - '2020-10-23 02:03:05', + expect(generateConfig.locale.format('en_US', date, 'YYYY-MM-DD HH:mm:ss.SSS')).toEqual( + '2020-10-23 02:03:05.333', ); }); diff --git a/tests/util/commonUtil.tsx b/tests/util/commonUtil.tsx index 155d2fa17..d56ec8b99 100644 --- a/tests/util/commonUtil.tsx +++ b/tests/util/commonUtil.tsx @@ -16,7 +16,7 @@ import RangePicker, { RangePickerTimeProps, } from '../../src/RangePicker'; -const FULL_FORMAT = 'YYYY-MM-DD HH:mm:ss'; +const FILLFULL_FORMAT = 'YYYY-MM-DD HH:mm:ss.SSS'; export type Wrapper = ReactWrapper & { confirmOK: () => void; @@ -34,7 +34,14 @@ export type Wrapper = ReactWrapper & { export const mount = originMount as (...args: Parameters) => Wrapper; export function getMoment(str: string): Moment { - const formatList = [FULL_FORMAT, 'YYYY-MM-DD', 'HH:mm:ss', 'YYYY']; + const formatList = [ + FILLFULL_FORMAT, + 'YYYY-MM-DD HH:mm:ss', + 'YYYY-MM-DD', + 'HH:mm:ss', + 'HH:mm:ss.SSS', + 'YYYY', + ]; for (let i = 0; i < formatList.length; i += 1) { const date = moment(str, formatList[i], true); if (date.isValid()) { @@ -53,7 +60,7 @@ export function isSame(date: Moment | null, dateStr: string, type: unitOfTime.St return true; } - throw new Error(`${date.format(FULL_FORMAT)} is not same as expected: ${dateStr}`); + throw new Error(`${date.format(FILLFULL_FORMAT)} is not same as expected: ${dateStr}`); } interface MomentDefaultProps {