// utils/day.js import dayjs from 'dayjs' import customParseFormat from 'dayjs/plugin/customParseFormat' import 'dayjs/locale/en' // 英文月份缩写依赖英文 locale dayjs.extend(customParseFormat) dayjs.locale('en') // 解析并返回 dayjs 实例 const parse = str => dayjs(str, 'MMM D, YYYY, h:mm:ss A') // 1️⃣ 2025年7月4日 export const toChineseDate = str => parse(str).format('YYYY年M月D日') export const toChineseDateMonth = str => parse(str).format('M月D日') // 2️⃣ 上午 / 下午 / 晚上 export const getDayPeriod = str => { const d = parse(str) const hm = d.hour() * 60 + d.minute() if (hm >= 360 && hm < 720) return '上午' if (hm >= 780 && hm < 960) return '下午' if (hm >= 1110 && hm < 1260) return '晚上' return '' } /** * 通用日期格式化函数 * @param {string} dateStr - 日期字符串 * @param {string} format - 目标格式 * @returns {string} 格式化后的日期 */ export const formatDate = (dateStr, format) => { if (!dateStr) return '' try { let dayjsInstance // 尝试解析不同的日期格式 if (typeof dateStr === 'string') { // 处理 "Aug 11, 2025, 6:00:00 AM" 格式 if (dateStr.includes(',') && (dateStr.includes('AM') || dateStr.includes('PM'))) { dayjsInstance = dayjs(dateStr, 'MMM D, YYYY, h:mm:ss A') } // 处理 "2025-08-11 06:00:00" 格式 else if (dateStr.includes('-') && dateStr.includes(':')) { dayjsInstance = dayjs(dateStr, 'YYYY-MM-DD HH:mm:ss') } // 其他格式尝试自动解析 else { dayjsInstance = dayjs(dateStr) } } else { dayjsInstance = dayjs(dateStr) } // 检查解析是否成功 if (!dayjsInstance.isValid()) { console.warn('日期解析失败:', dateStr) return dateStr } // 根据目标格式进行格式化 let result if (format === 'yyyy-MM-dd HH:mm:ss') { result = dayjsInstance.format('YYYY-MM-DD HH:mm:ss') } else if (format === 'yyyy-MM-dd') { result = dayjsInstance.format('YYYY-MM-DD') } else if (format === 'HH:mm:ss') { result = dayjsInstance.format('HH:mm:ss') } else if (format === 'HH:mm') { result = dayjsInstance.format('HH:mm') } else if (format === 'MM/DD') { result = dayjsInstance.format('MM/DD') } else { // 默认转换为中文日期格式 result = dayjsInstance.format('YYYY年M月D日') } return result } catch (error) { console.error('日期格式化失败:', error, dateStr) return dateStr } }