77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
/**
|
|
* 格式化工具函数
|
|
*/
|
|
|
|
/**
|
|
* 清理URL字符串
|
|
* @param {string} url - 原始URL
|
|
* @returns {string} 清理后的URL
|
|
*/
|
|
export function cleanUrl(url) {
|
|
const s = String(url || '').trim()
|
|
const m = s.match(/https?:\/\/[^\s'"`]+/)
|
|
if (m && m[0]) return m[0]
|
|
return s.replace(/[`'"]/g, '').trim()
|
|
}
|
|
|
|
/**
|
|
* 格式化百分比
|
|
* @param {number} value - 百分比值
|
|
* @returns {string}
|
|
*/
|
|
export function formatPercent(value) {
|
|
const n = Number(value)
|
|
if (!Number.isFinite(n)) return '0%'
|
|
return `${n}%`
|
|
}
|
|
|
|
/**
|
|
* 格式化日期时间
|
|
* @param {string|number|Date} value - 日期值
|
|
* @returns {string}
|
|
*/
|
|
export function formatDateTime(value) {
|
|
const s = String(value || '').trim()
|
|
if (!s) return ''
|
|
const d = new Date(s)
|
|
if (Number.isNaN(d.getTime())) return s
|
|
const y = d.getFullYear()
|
|
const m = String(d.getMonth() + 1).padStart(2, '0')
|
|
const day = String(d.getDate()).padStart(2, '0')
|
|
const hh = String(d.getHours()).padStart(2, '0')
|
|
const mm = String(d.getMinutes()).padStart(2, '0')
|
|
const ss = String(d.getSeconds()).padStart(2, '0')
|
|
return `${y}-${m}-${day} ${hh}:${mm}:${ss}`
|
|
}
|
|
|
|
/**
|
|
* 格式化价格(分转元)
|
|
* @param {number} cents - 分
|
|
* @param {number} decimals - 小数位数
|
|
* @returns {string}
|
|
*/
|
|
export function formatPrice(cents, decimals = 2) {
|
|
const yuan = Number(cents || 0) / 100
|
|
return yuan.toFixed(decimals)
|
|
}
|
|
|
|
/**
|
|
* 解析时间为毫秒戳
|
|
* @param {any} value - 时间值
|
|
* @returns {number|null}
|
|
*/
|
|
export function parseTimeMs(value) {
|
|
if (value === undefined || value === null || value === '') return null
|
|
if (typeof value === 'number') {
|
|
if (!Number.isFinite(value)) return null
|
|
return value < 1e12 ? value * 1000 : value
|
|
}
|
|
const s = String(value).trim()
|
|
if (!s) return null
|
|
const asNum = Number(s)
|
|
if (Number.isFinite(asNum)) return asNum < 1e12 ? asNum * 1000 : asNum
|
|
const d = new Date(s)
|
|
if (Number.isNaN(d.getTime())) return null
|
|
return d.getTime()
|
|
}
|