/** * 格式化工具模块 */ /** * 格式化时间戳 * - "今天 HH:mm" if same day * - "昨天" if 1 day ago * - "前天" if 2 days ago * - "M月D号" if more than 2 days ago */ export function formatTimestamp(timestamp, now = new Date()) { if (!timestamp) return '' const date = new Date(timestamp) if (isNaN(date.getTime())) return '' const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()) const yesterdayStart = new Date(todayStart.getTime() - 24 * 60 * 60 * 1000) const dayBeforeYesterdayStart = new Date(todayStart.getTime() - 2 * 24 * 60 * 60 * 1000) const dateStart = new Date(date.getFullYear(), date.getMonth(), date.getDate()) if (dateStart.getTime() === todayStart.getTime()) { const hours = String(date.getHours()).padStart(2, '0') const minutes = String(date.getMinutes()).padStart(2, '0') return `今天 ${hours}:${minutes}` } else if (dateStart.getTime() === yesterdayStart.getTime()) { return '昨天' } else if (dateStart.getTime() === dayBeforeYesterdayStart.getTime()) { return '前天' } else { const month = date.getMonth() + 1 const day = date.getDate() return `${month}月${day}号` } } /** * 脱敏姓名 */ export function maskName(name) { if (!name || name.length === 0) return '' if (name.length === 1) return name if (name.length === 2) return name[0] + '*' const first = name[0] const last = name[name.length - 1] const middle = '*'.repeat(name.length - 2) return first + middle + last } /** * 脱敏手机号 */ export function maskPhone(phone) { if (!phone || phone.length < 7) return phone || '' return phone.substring(0, 3) + '****' + phone.substring(phone.length - 4) } export default { formatTimestamp, maskName, maskPhone }