42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
/** 日期时间格式化(兼容原 CRM parseTime 用法) */
|
|
export function parseTime(time?: string | number | Date | null, pattern = '{y}-{m}-{d} {h}:{i}:{s}'): string {
|
|
if (time == null || time === '') return ''
|
|
let date: Date
|
|
if (typeof time === 'object') {
|
|
date = time
|
|
} else {
|
|
if (typeof time === 'string' && /^[0-9]+$/.test(time)) {
|
|
time = parseInt(time, 10)
|
|
}
|
|
if (typeof time === 'number' && time.toString().length === 10) {
|
|
time = time * 1000
|
|
}
|
|
date = new Date(time)
|
|
}
|
|
if (Number.isNaN(date.getTime())) return ''
|
|
const formatObj: Record<string, number> = {
|
|
y: date.getFullYear(),
|
|
m: date.getMonth() + 1,
|
|
d: date.getDate(),
|
|
h: date.getHours(),
|
|
i: date.getMinutes(),
|
|
s: date.getSeconds(),
|
|
a: date.getDay()
|
|
}
|
|
return pattern.replace(/\{([ymdhisa])+\}/g, (_result, key: string) => {
|
|
const value = formatObj[key]
|
|
if (key === 'a') {
|
|
return ['日', '一', '二', '三', '四', '五', '六'][value]
|
|
}
|
|
return value.toString().padStart(2, '0')
|
|
})
|
|
}
|
|
|
|
export function formatDateTime(time?: string | null) {
|
|
return parseTime(time)
|
|
}
|
|
|
|
export function formatDate(time?: string | number | Date | null) {
|
|
return parseTime(time, '{y}-{m}-{d}')
|
|
}
|