| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- export function formatConversationTime(dateStr: string | null | undefined): string {
- if (!dateStr) {
- return "-";
- }
- const date = new Date(dateStr);
- if (Number.isNaN(date.getTime())) {
- return "-";
- }
- const now = new Date();
- const diff = now.getTime() - date.getTime();
- if (diff < 24 * 3600 * 1000 && date.getDate() === now.getDate()) {
- return date.toLocaleTimeString("zh-CN", {
- hour: "2-digit",
- minute: "2-digit",
- });
- }
- return date.toLocaleString("zh-CN", {
- month: "2-digit",
- day: "2-digit",
- hour: "2-digit",
- minute: "2-digit",
- });
- }
- export function formatMessageTime(dateStr: string | null | undefined): string {
- if (!dateStr) {
- return "";
- }
- const date = new Date(dateStr);
- if (Number.isNaN(date.getTime())) {
- return "";
- }
- const now = new Date();
- const diff = now.getTime() - date.getTime();
- if (diff < 24 * 3600 * 1000 && date.getDate() === now.getDate()) {
- return date.toLocaleTimeString("zh-CN", {
- hour: "2-digit",
- minute: "2-digit",
- });
- }
- return date.toLocaleString("zh-CN", {
- month: "2-digit",
- day: "2-digit",
- hour: "2-digit",
- minute: "2-digit",
- });
- }
- export function buildMessagePreview(content: string, maxLength = 50): string {
- if (!content) {
- return "";
- }
- if (content.length <= maxLength) {
- return content;
- }
- return `${content.substring(0, maxLength)}...`;
- }
- // 判断访客是否在线(根据 last_seen_at 字段)
- // 如果 last_seen_at 在最近 10 秒内,则认为在线
- export function isVisitorOnline(lastSeenAt: string | null | undefined): boolean {
- if (!lastSeenAt) {
- return false;
- }
- const lastSeen = new Date(lastSeenAt);
- if (Number.isNaN(lastSeen.getTime())) {
- return false;
- }
- const now = new Date();
- const diff = now.getTime() - lastSeen.getTime();
- // 10 秒内认为在线
- return diff < 10 * 1000;
- }
|