mirror of https://github.com/nocodb/nocodb
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.
88 lines
2.1 KiB
88 lines
2.1 KiB
import dayjs from 'dayjs' |
|
|
|
// show in local time |
|
export const timeAgo = (date: any) => { |
|
// handle Z and +00:00 |
|
if (date.slice(-1) === 'Z' || date.slice(-6) === '+00:00') { |
|
return dayjs(date).fromNow() |
|
} |
|
return dayjs(date).utc(true).local().fromNow() |
|
} |
|
|
|
export const dateFormats = [ |
|
'YYYY-MM-DD', |
|
'YYYY/MM/DD', |
|
'DD-MM-YYYY', |
|
'MM-DD-YYYY', |
|
'DD/MM/YYYY', |
|
'MM/DD/YYYY', |
|
'DD MM YYYY', |
|
'MM DD YYYY', |
|
'YYYY MM DD', |
|
] |
|
|
|
export const timeFormats = ['HH:mm', 'HH:mm:ss'] |
|
|
|
export const handleTZ = (val: any) => { |
|
if (val === undefined || val === null) { |
|
return |
|
} |
|
if (typeof val !== 'string') { |
|
return val |
|
} |
|
return val.replace( |
|
/((?:-?(?:[1-9][0-9]*)?[0-9]{4})-(?:1[0-2]|0[1-9])-(?:3[01]|0[1-9]|[12][0-9])T(?:2[0-3]|[01][0-9]):(?:[0-5][0-9]):(?:[0-5][0-9])(?:\.[0-9]+)?(?:Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9]))/g, |
|
(i, v) => { |
|
return dayjs(v).format('YYYY-MM-DD HH:mm') |
|
}, |
|
) |
|
} |
|
|
|
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 timeFormats) { |
|
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 |
|
}
|
|
|