bindbox-mini/utils/format.js

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()
}