date.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // utils/day.js
  2. import dayjs from 'dayjs'
  3. import customParseFormat from 'dayjs/plugin/customParseFormat'
  4. import 'dayjs/locale/en' // 英文月份缩写依赖英文 locale
  5. dayjs.extend(customParseFormat)
  6. dayjs.locale('en')
  7. // 解析并返回 dayjs 实例
  8. const parse = str =>
  9. dayjs(str, 'MMM D, YYYY, h:mm:ss A')
  10. // 1️⃣ 2025年7月4日
  11. export const toChineseDate = str =>
  12. parse(str).format('YYYY年M月D日')
  13. export const toChineseDateMonth = str =>
  14. parse(str).format('M月D日')
  15. // 2️⃣ 上午 / 下午 / 晚上
  16. export const getDayPeriod = str => {
  17. const d = parse(str)
  18. const hm = d.hour() * 60 + d.minute()
  19. if (hm >= 360 && hm < 720) return '上午'
  20. if (hm >= 780 && hm < 960) return '下午'
  21. if (hm >= 1110 && hm < 1260) return '晚上'
  22. return ''
  23. }
  24. /**
  25. * 通用日期格式化函数
  26. * @param {string} dateStr - 日期字符串
  27. * @param {string} format - 目标格式
  28. * @returns {string} 格式化后的日期
  29. */
  30. export const formatDate = (dateStr, format) => {
  31. if (!dateStr) return ''
  32. try {
  33. let dayjsInstance
  34. // 尝试解析不同的日期格式
  35. if (typeof dateStr === 'string') {
  36. // 处理 "Aug 11, 2025, 6:00:00 AM" 格式
  37. if (dateStr.includes(',') && (dateStr.includes('AM') || dateStr.includes('PM'))) {
  38. dayjsInstance = dayjs(dateStr, 'MMM D, YYYY, h:mm:ss A')
  39. }
  40. // 处理 "2025-08-11 06:00:00" 格式
  41. else if (dateStr.includes('-') && dateStr.includes(':')) {
  42. dayjsInstance = dayjs(dateStr, 'YYYY-MM-DD HH:mm:ss')
  43. }
  44. // 其他格式尝试自动解析
  45. else {
  46. dayjsInstance = dayjs(dateStr)
  47. }
  48. } else {
  49. dayjsInstance = dayjs(dateStr)
  50. }
  51. // 检查解析是否成功
  52. if (!dayjsInstance.isValid()) {
  53. console.warn('日期解析失败:', dateStr)
  54. return dateStr
  55. }
  56. // 根据目标格式进行格式化
  57. let result
  58. if (format === 'yyyy-MM-dd HH:mm:ss') {
  59. result = dayjsInstance.format('YYYY-MM-DD HH:mm:ss')
  60. } else if (format === 'yyyy-MM-dd') {
  61. result = dayjsInstance.format('YYYY-MM-DD')
  62. } else if (format === 'HH:mm:ss') {
  63. result = dayjsInstance.format('HH:mm:ss')
  64. } else if (format === 'HH:mm') {
  65. result = dayjsInstance.format('HH:mm')
  66. } else if (format === 'MM/DD') {
  67. result = dayjsInstance.format('MM/DD')
  68. } else {
  69. // 默认转换为中文日期格式
  70. result = dayjsInstance.format('YYYY年M月D日')
  71. }
  72. return result
  73. } catch (error) {
  74. console.error('日期格式化失败:', error, dateStr)
  75. return dateStr
  76. }
  77. }