/** * 格式化工具函数 */ /** * 清理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() }