format.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. export function formatConversationTime(dateStr: string | null | undefined): string {
  2. if (!dateStr) {
  3. return "-";
  4. }
  5. const date = new Date(dateStr);
  6. if (Number.isNaN(date.getTime())) {
  7. return "-";
  8. }
  9. const now = new Date();
  10. const diff = now.getTime() - date.getTime();
  11. if (diff < 24 * 3600 * 1000 && date.getDate() === now.getDate()) {
  12. return date.toLocaleTimeString("zh-CN", {
  13. hour: "2-digit",
  14. minute: "2-digit",
  15. });
  16. }
  17. return date.toLocaleString("zh-CN", {
  18. month: "2-digit",
  19. day: "2-digit",
  20. hour: "2-digit",
  21. minute: "2-digit",
  22. });
  23. }
  24. export function formatMessageTime(dateStr: string | null | undefined): string {
  25. if (!dateStr) {
  26. return "";
  27. }
  28. const date = new Date(dateStr);
  29. if (Number.isNaN(date.getTime())) {
  30. return "";
  31. }
  32. const now = new Date();
  33. const diff = now.getTime() - date.getTime();
  34. if (diff < 24 * 3600 * 1000 && date.getDate() === now.getDate()) {
  35. return date.toLocaleTimeString("zh-CN", {
  36. hour: "2-digit",
  37. minute: "2-digit",
  38. });
  39. }
  40. return date.toLocaleString("zh-CN", {
  41. month: "2-digit",
  42. day: "2-digit",
  43. hour: "2-digit",
  44. minute: "2-digit",
  45. });
  46. }
  47. export function buildMessagePreview(content: string, maxLength = 50): string {
  48. if (!content) {
  49. return "";
  50. }
  51. if (content.length <= maxLength) {
  52. return content;
  53. }
  54. return `${content.substring(0, maxLength)}...`;
  55. }
  56. // 判断访客是否在线(根据 last_seen_at 字段)
  57. // 如果 last_seen_at 在最近 10 秒内,则认为在线
  58. export function isVisitorOnline(lastSeenAt: string | null | undefined): boolean {
  59. if (!lastSeenAt) {
  60. return false;
  61. }
  62. const lastSeen = new Date(lastSeenAt);
  63. if (Number.isNaN(lastSeen.getTime())) {
  64. return false;
  65. }
  66. const now = new Date();
  67. const diff = now.getTime() - lastSeen.getTime();
  68. // 10 秒内认为在线
  69. return diff < 10 * 1000;
  70. }