mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-05 13:39:24 +08:00
chore: datetime parser (#5865)
This commit is contained in:
parent
5808543ebc
commit
f9afb13cee
@ -69,6 +69,7 @@ describe('Date time interface', () => {
|
||||
expect(await interfaceInstance.toValue('')).toBe(null);
|
||||
|
||||
expect(await interfaceInstance.toValue('20231223')).toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expect(await interfaceInstance.toValue('20231223 08:01:01')).toBe(dayjs('2023-12-23 08:01:01.000').toISOString());
|
||||
expect(await interfaceInstance.toValue('2023/12/23')).toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expect(await interfaceInstance.toValue('2023-12-23')).toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expect(await interfaceInstance.toValue(42510)).toBe('2016-05-20T00:00:00.000Z');
|
||||
|
@ -68,6 +68,7 @@ describe('number value parser', () => {
|
||||
|
||||
it('should be correct', () => {
|
||||
expectValue('20231223').toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expectValue('20231223 08:01:01', 'dateTime').toBe(dayjs('2023-12-23 08:01:01').toISOString());
|
||||
expectValue('2023/12/23').toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expectValue('2023-12-23').toBe(dayjs('2023-12-23 00:00:00.000').toISOString());
|
||||
expectValue(42510).toBe('2016-05-20T00:00:00.000Z');
|
||||
|
@ -31,16 +31,45 @@ function resolveTimeZoneFromCtx(ctx) {
|
||||
}
|
||||
|
||||
export class DatetimeInterface extends BaseInterface {
|
||||
protected parseDateString(value: string) {
|
||||
const dateOnlyMatch = /^(\d{4})[-/]?(\d{2})[-/]?(\d{2})$/.exec(value);
|
||||
const dateTimeMatch = /^(\d{4})(\d{2})(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$/.exec(value);
|
||||
|
||||
if (dateTimeMatch) {
|
||||
const [_, year, month, day, hour, minute, second] = dateTimeMatch;
|
||||
return { year, month, day, hour, minute, second };
|
||||
}
|
||||
|
||||
if (dateOnlyMatch) {
|
||||
const [_, year, month, day] = dateOnlyMatch;
|
||||
return { year, month, day };
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
protected formatDateTimeToISO(dateInfo: {
|
||||
year: string;
|
||||
month: string;
|
||||
day: string;
|
||||
hour?: string;
|
||||
minute?: string;
|
||||
second?: string;
|
||||
}) {
|
||||
const { year, month, day, hour = '00', minute = '00', second = '00' } = dateInfo;
|
||||
const m = dayjs(`${year}-${month}-${day} ${hour}:${minute}:${second}.000`);
|
||||
return m.toISOString();
|
||||
}
|
||||
|
||||
async toValue(value: any, ctx: any = {}): Promise<any> {
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
const match = /^(\d{4})[-/]?(\d{2})[-/]?(\d{2})$/.exec(value);
|
||||
if (match) {
|
||||
const m = dayjs(`${match[1]}-${match[2]}-${match[3]} 00:00:00.000`);
|
||||
return m.toISOString();
|
||||
const dateInfo = this.parseDateString(value);
|
||||
if (dateInfo) {
|
||||
return this.formatDateTimeToISO(dateInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,15 +14,30 @@ function isNumeric(str: any) {
|
||||
}
|
||||
|
||||
export class DatetimeNoTzInterface extends DatetimeInterface {
|
||||
protected formatDateTimeToString(dateInfo: {
|
||||
year: string;
|
||||
month: string;
|
||||
day: string;
|
||||
hour?: string;
|
||||
minute?: string;
|
||||
second?: string;
|
||||
}) {
|
||||
const { year, month, day, hour, minute, second } = dateInfo;
|
||||
if (hour !== undefined && minute !== undefined && second !== undefined) {
|
||||
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
|
||||
}
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
|
||||
async toValue(value: any, ctx: any = {}): Promise<any> {
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof value === 'string') {
|
||||
const match = /^(\d{4})[-/]?(\d{2})[-/]?(\d{2})$/.exec(value);
|
||||
if (match) {
|
||||
return `${match[1]}-${match[2]}-${match[3]}`;
|
||||
const dateInfo = this.parseDateString(value);
|
||||
if (dateInfo) {
|
||||
return this.formatDateTimeToString(dateInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user