93 lines
2.6 KiB
TypeScript
93 lines
2.6 KiB
TypeScript
// Parse the time to string
|
|
export const parseTime = (
|
|
time?: object | string | number | null,
|
|
cFormat?: string
|
|
): string | null => {
|
|
if (time === undefined || !time) {
|
|
return null
|
|
}
|
|
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
|
|
let date: Date
|
|
if (typeof time === 'object') {
|
|
date = time as Date
|
|
} else {
|
|
if (typeof time === 'string') {
|
|
if (/^[0-9]+$/.test(time)) {
|
|
// support "1548221490638"
|
|
time = parseInt(time)
|
|
} else {
|
|
// support safari
|
|
// https://stackoverflow.com/questions/4310953/invalid-date-in-safari
|
|
// time = time.replace(new RegExp(/-/gm), '/')
|
|
}
|
|
}
|
|
if (typeof time === 'number' && time.toString().length === 10) {
|
|
time = time * 1000
|
|
}
|
|
date = new Date(time)
|
|
}
|
|
const formatObj: { [key: string]: number } = {
|
|
y: date.getFullYear(),
|
|
m: date.getMonth() + 1,
|
|
d: date.getDate(),
|
|
h: date.getHours(),
|
|
i: date.getMinutes(),
|
|
s: date.getSeconds(),
|
|
a: date.getDay()
|
|
}
|
|
const timeStr = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
|
const value = formatObj[key]
|
|
// Note: getDay() returns 0 on Sunday
|
|
if (key === 'a') {
|
|
return ['日', '一', '二', '三', '四', '五', '六'][value]
|
|
}
|
|
return value.toString().padStart(2, '0')
|
|
})
|
|
return timeStr
|
|
}
|
|
|
|
// Format and filter json data using filterKeys array
|
|
export const formatJson = (filterKeys: any, jsonData: any) =>
|
|
jsonData.map((data: any) => filterKeys.map((key: string) => {
|
|
if (key === 'timestamp') {
|
|
return parseTime(data[key])
|
|
} else {
|
|
return data[key]
|
|
}
|
|
}))
|
|
|
|
// Check if an element has a class
|
|
export const hasClass = (ele: HTMLElement, className: string) => {
|
|
return !!ele.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)'))
|
|
}
|
|
|
|
// Add class to element
|
|
export const addClass = (ele: HTMLElement, className: string) => {
|
|
if (!hasClass(ele, className)) ele.className += ' ' + className
|
|
}
|
|
|
|
// Remove class from element
|
|
export const removeClass = (ele: HTMLElement, className: string) => {
|
|
if (hasClass(ele, className)) {
|
|
const reg = new RegExp('(\\s|^)' + className + '(\\s|$)')
|
|
ele.className = ele.className.replace(reg, ' ')
|
|
}
|
|
}
|
|
|
|
// Toggle class for the selected element
|
|
export const toggleClass = (ele: HTMLElement, className: string) => {
|
|
if (!ele || !className) {
|
|
return
|
|
}
|
|
let classString = ele.className
|
|
const nameIndex = classString.indexOf(className)
|
|
if (nameIndex === -1) {
|
|
classString += '' + className
|
|
} else {
|
|
classString =
|
|
classString.substr(0, nameIndex) +
|
|
classString.substr(nameIndex + className.length)
|
|
}
|
|
ele.className = classString
|
|
}
|