mirror of https://github.com/nocodb/nocodb
աɨռɢӄաօռɢ
2 years ago
committed by
GitHub
11 changed files with 481 additions and 1 deletions
@ -0,0 +1,137 @@ |
|||||||
|
export function convertUnits( |
||||||
|
unit: string, |
||||||
|
type: 'mysql' | 'mssql' | 'pg' | 'sqlite' |
||||||
|
) { |
||||||
|
switch (unit) { |
||||||
|
case 'milliseconds': |
||||||
|
case 'ms': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
return 'millisecond'; |
||||||
|
case 'mysql': |
||||||
|
// MySQL doesn't support millisecond
|
||||||
|
// hence change from MICROSECOND to millisecond manually
|
||||||
|
return 'MICROSECOND'; |
||||||
|
case 'pg': |
||||||
|
case 'sqlite': |
||||||
|
return 'milliseconds'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'seconds': |
||||||
|
case 's': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'second'; |
||||||
|
case 'mysql': |
||||||
|
return 'SECOND'; |
||||||
|
case 'sqlite': |
||||||
|
return 'seconds'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'minutes': |
||||||
|
case 'm': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'minute'; |
||||||
|
case 'mysql': |
||||||
|
return 'MINUTE'; |
||||||
|
case 'sqlite': |
||||||
|
return 'minutes'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'hours': |
||||||
|
case 'h': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'hour'; |
||||||
|
case 'mysql': |
||||||
|
return 'HOUR'; |
||||||
|
case 'sqlite': |
||||||
|
return 'hours'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'days': |
||||||
|
case 'd': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'day'; |
||||||
|
case 'mysql': |
||||||
|
return 'DAY'; |
||||||
|
case 'sqlite': |
||||||
|
return 'days'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'weeks': |
||||||
|
case 'w': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'week'; |
||||||
|
case 'mysql': |
||||||
|
return 'WEEK'; |
||||||
|
case 'sqlite': |
||||||
|
return 'weeks'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'months': |
||||||
|
case 'M': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'month'; |
||||||
|
case 'mysql': |
||||||
|
return 'MONTH'; |
||||||
|
case 'sqlite': |
||||||
|
return 'months'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'quarters': |
||||||
|
case 'Q': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'quarter'; |
||||||
|
case 'mysql': |
||||||
|
return 'QUARTER'; |
||||||
|
case 'sqlite': |
||||||
|
return 'quarters'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
case 'years': |
||||||
|
case 'y': { |
||||||
|
switch (type) { |
||||||
|
case 'mssql': |
||||||
|
case 'pg': |
||||||
|
return 'year'; |
||||||
|
case 'mysql': |
||||||
|
return 'YEAR'; |
||||||
|
case 'sqlite': |
||||||
|
return 'years'; |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
||||||
|
default: |
||||||
|
return unit; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
import dayjs from 'dayjs'; |
||||||
|
|
||||||
|
export const dateFormats = [ |
||||||
|
'DD-MM-YYYY', |
||||||
|
'MM-DD-YYYY', |
||||||
|
'YYYY-MM-DD', |
||||||
|
'DD/MM/YYYY', |
||||||
|
'MM/DD/YYYY', |
||||||
|
'YYYY/MM/DD', |
||||||
|
'DD MM YYYY', |
||||||
|
'MM DD YYYY', |
||||||
|
'YYYY MM DD', |
||||||
|
]; |
||||||
|
|
||||||
|
export function validateDateFormat(v: string) { |
||||||
|
return dateFormats.includes(v); |
||||||
|
} |
||||||
|
|
||||||
|
export function validateDateWithUnknownFormat(v: string) { |
||||||
|
for (const format of dateFormats) { |
||||||
|
if (dayjs(v, format, true).isValid() as any) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
for (const timeFormat of ['HH:mm', 'HH:mm:ss', 'HH:mm:ss.SSS']) { |
||||||
|
if (dayjs(v, `${format} ${timeFormat}`, true).isValid() as any) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
export function getDateFormat(v: string) { |
||||||
|
for (const format of dateFormats) { |
||||||
|
if (dayjs(v, format, true).isValid()) { |
||||||
|
return format; |
||||||
|
} |
||||||
|
} |
||||||
|
return 'YYYY/MM/DD'; |
||||||
|
} |
||||||
|
|
||||||
|
export function getDateTimeFormat(v: string) { |
||||||
|
for (const format of dateFormats) { |
||||||
|
for (const timeFormat of ['HH:mm', 'HH:mm:ss', 'HH:mm:ss.SSS']) { |
||||||
|
const dateTimeFormat = `${format} ${timeFormat}`; |
||||||
|
if (dayjs(v, dateTimeFormat, true).isValid() as any) { |
||||||
|
return dateTimeFormat; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return 'YYYY/MM/DD'; |
||||||
|
} |
||||||
|
|
||||||
|
export function parseStringDate(v: string, dateFormat: string) { |
||||||
|
const dayjsObj = dayjs(v); |
||||||
|
if (dayjsObj.isValid()) { |
||||||
|
v = dayjsObj.format('YYYY-MM-DD'); |
||||||
|
} else { |
||||||
|
v = dayjs(v, dateFormat).format('YYYY-MM-DD'); |
||||||
|
} |
||||||
|
return v; |
||||||
|
} |
||||||
|
|
||||||
|
export function convertToTargetFormat( |
||||||
|
v: string, |
||||||
|
oldDataFormat, |
||||||
|
newDateFormat: string |
||||||
|
) { |
||||||
|
if ( |
||||||
|
!dateFormats.includes(oldDataFormat) || |
||||||
|
!dateFormats.includes(newDateFormat) |
||||||
|
) |
||||||
|
return v; |
||||||
|
return dayjs(v, oldDataFormat).format(newDateFormat); |
||||||
|
} |
Loading…
Reference in new issue