// 日期格式化函数 export function formatDate(date, fmt = 'YYYY-MM-DD HH:mm:ss') { if (!date) return '' // 关键修复:对日期字符串进行兼容性处理 let parsedDate if (typeof date === 'string') { // 处理标准日期时间字符串: 将 "-" 替换为 "/" 以提高iOS兼容性 // 同时处理可能存在的 "T" 分隔符和时区信息 date = date.replace(/-/g, '/').replace('T', ' ').split('.')[0] // 对于可能是数字字符串的情况(如时间戳),尝试转换为数字 if (/^\d+$/.test(date)) { parsedDate = new Date(parseInt(date)) } else { parsedDate = new Date(date) } } else if (typeof date === 'number') { // 如果传入的是数字时间戳,确保是毫秒级 parsedDate = new Date(date < 10000000000 ? date * 1000 : date) } else { // 其他情况(如已经是Date对象) parsedDate = new Date(date) } // 检查日期是否有效 if (isNaN(parsedDate.getTime())) { console.warn('Invalid date:', date) return 'Invalid Date' } const d = parsedDate const padZero = num => (num < 10 ? `0${num}` : num) const map = { 'YYYY': d.getFullYear(), 'MM': padZero(d.getMonth() + 1), 'DD': padZero(d.getDate()), 'HH': padZero(d.getHours()), 'mm': padZero(d.getMinutes()), 'ss': padZero(d.getSeconds()) } return fmt.replace(/(YYYY|MM|DD|HH|mm|ss)/g, match => map[match]) } // 相对时间计算 export function relativeTime(date) { const now = new Date() const diff = now - new Date(date) const minute = 60 * 1000 const hour = minute * 60 const day = hour * 24 if (diff < minute) return '刚刚' if (diff < hour) return `${Math.floor(diff/minute)}分钟前` if (diff < day) return `${Math.floor(diff/hour)}小时前` return formatDate(date, 'YYYY-MM-DD') }