| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // 日期格式化函数
- 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')
- }
|