dateTime.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import dayjs from 'dayjs';
  2. import relativeTime from 'dayjs/plugin/relativeTime';
  3. import isToday from 'dayjs/plugin/isToday';
  4. import isYesterday from 'dayjs/plugin/isYesterday';
  5. import weekday from 'dayjs/plugin/weekday';
  6. // 加载插件
  7. dayjs.extend(relativeTime);
  8. dayjs.extend(isToday);
  9. dayjs.extend(isYesterday);
  10. dayjs.extend(weekday);
  11. function handleTime(timestamp) {
  12. const msgDate = dayjs(timestamp);
  13. const now = dayjs();
  14. // 获取当前时区的零点时间戳
  15. const todayStart = now.startOf('day');
  16. const yesterdayStart = todayStart.subtract(1, 'day');
  17. const lastWeekStart = todayStart.subtract(7, 'day');
  18. if (msgDate.isToday()) {
  19. // 今天:上午/下午 + 小时分钟
  20. const hour = msgDate.hour();
  21. let period = '凌晨';
  22. if (hour >= 6 && hour < 12) {
  23. period = '上午';
  24. } else if (hour >= 12 && hour < 18) {
  25. period = '下午';
  26. } else if (hour >= 18 || hour < 6) {
  27. period = '晚上';
  28. }
  29. return `${period}${msgDate.format('HH:mm')}`;
  30. }
  31. if (msgDate.isYesterday()) {
  32. // 昨天:昨天 + 小时分钟
  33. return `昨天 ${msgDate.format('HH:mm')}`;
  34. }
  35. if (msgDate.isAfter(lastWeekStart)) {
  36. // 本周内(非今天、非昨天):星期几 + 小时分钟
  37. const weekDays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  38. const day = weekDays[msgDate.day()];
  39. return `${day} ${msgDate.format('HH:mm')}`;
  40. }
  41. if (msgDate.year() === now.year()) {
  42. // 同一年,不同周:月/日 + 小时分钟
  43. return msgDate.format('MM/DD HH:mm');
  44. }
  45. // 跨年:年/月/日 + 小时分钟
  46. return msgDate.format('YYYY/MM/DD HH:mm');
  47. }
  48. export { handleTime }