修复 时间 格式化为题
This commit is contained in:
@@ -3,6 +3,7 @@ import { View, Text, ScrollView, Image, Input } from "@tarojs/components";
|
|||||||
import { Avatar } from "@nutui/nutui-react-taro";
|
import { Avatar } from "@nutui/nutui-react-taro";
|
||||||
import { withAuth, EmptyState } from "@/components";
|
import { withAuth, EmptyState } from "@/components";
|
||||||
import commentService, { CommentActivity } from "@/services/commentService";
|
import commentService, { CommentActivity } from "@/services/commentService";
|
||||||
|
import { formatShortRelativeTime } from "@/utils/timeUtils";
|
||||||
import Taro from "@tarojs/taro";
|
import Taro from "@tarojs/taro";
|
||||||
import "./index.scss";
|
import "./index.scss";
|
||||||
|
|
||||||
@@ -78,31 +79,6 @@ const CommentReply = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 格式化时间显示
|
|
||||||
const formatTime = (timeStr: string) => {
|
|
||||||
if (!timeStr) return "";
|
|
||||||
|
|
||||||
const date = new Date(timeStr);
|
|
||||||
const now = new Date();
|
|
||||||
const diff = now.getTime() - date.getTime();
|
|
||||||
const minutes = Math.floor(diff / (1000 * 60));
|
|
||||||
const hours = Math.floor(diff / (1000 * 60 * 60));
|
|
||||||
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
||||||
|
|
||||||
if (minutes < 60) {
|
|
||||||
return `${minutes}分钟前`;
|
|
||||||
} else if (hours < 24) {
|
|
||||||
return `${hours}小时前`;
|
|
||||||
} else if (days === 1) {
|
|
||||||
return "1天前";
|
|
||||||
} else if (days < 7) {
|
|
||||||
return `${days}天前`;
|
|
||||||
} else {
|
|
||||||
const month = date.getMonth() + 1;
|
|
||||||
const day = date.getDate();
|
|
||||||
return `${month}月${day}日`;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 处理回复
|
// 处理回复
|
||||||
const handleReply = (e: any, item: CommentReplyItem) => {
|
const handleReply = (e: any, item: CommentReplyItem) => {
|
||||||
@@ -266,7 +242,7 @@ const CommentReply = () => {
|
|||||||
|
|
||||||
<View className="action-row">
|
<View className="action-row">
|
||||||
<Text className="action-text">{actionText}</Text>
|
<Text className="action-text">{actionText}</Text>
|
||||||
<Text className="time-text">{formatTime(item.time)}</Text>
|
<Text className="time-text">{formatShortRelativeTime(item.time)}</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<Text className="comment-text">{item.content}</Text>
|
<Text className="comment-text">{item.content}</Text>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import GuideBar from "@/components/GuideBar";
|
|||||||
import { withAuth, EmptyState } from "@/components";
|
import { withAuth, EmptyState } from "@/components";
|
||||||
import noticeService from "@/services/noticeService";
|
import noticeService from "@/services/noticeService";
|
||||||
import { useUserInfo } from "@/store/userStore";
|
import { useUserInfo } from "@/store/userStore";
|
||||||
|
import { formatRelativeTime } from "@/utils/timeUtils";
|
||||||
import Taro from "@tarojs/taro";
|
import Taro from "@tarojs/taro";
|
||||||
import "./index.scss";
|
import "./index.scss";
|
||||||
|
|
||||||
@@ -130,33 +131,6 @@ const Message = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 格式化时间显示
|
|
||||||
const formatTime = (timeStr: string) => {
|
|
||||||
if (!timeStr) return "";
|
|
||||||
const date = new Date(timeStr);
|
|
||||||
const now = new Date();
|
|
||||||
const diff = now.getTime() - date.getTime();
|
|
||||||
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
||||||
|
|
||||||
if (days === 0) {
|
|
||||||
const hours = date.getHours();
|
|
||||||
const minutes = date.getMinutes();
|
|
||||||
return `今天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
|
||||||
} else if (days === 1) {
|
|
||||||
const hours = date.getHours();
|
|
||||||
const minutes = date.getMinutes();
|
|
||||||
return `昨天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
|
||||||
} else if (days < 3) {
|
|
||||||
return `${days}天前`;
|
|
||||||
} else {
|
|
||||||
const year = date.getFullYear();
|
|
||||||
const month = date.getMonth() + 1;
|
|
||||||
const day = date.getDate();
|
|
||||||
const hours = date.getHours();
|
|
||||||
const minutes = date.getMinutes();
|
|
||||||
return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className="message-container">
|
<View className="message-container">
|
||||||
@@ -219,7 +193,7 @@ const Message = () => {
|
|||||||
<Text className="card-title">{message.title}</Text>
|
<Text className="card-title">{message.title}</Text>
|
||||||
</View>
|
</View>
|
||||||
<View className="card-time-row">
|
<View className="card-time-row">
|
||||||
<Text className="card-time">{formatTime(message.create_time)}</Text>
|
<Text className="card-time">{formatRelativeTime(message.create_time)}</Text>
|
||||||
</View>
|
</View>
|
||||||
<View className="card-content-row">
|
<View className="card-content-row">
|
||||||
<Text className="card-content">{message.content}</Text>
|
<Text className="card-content">{message.content}</Text>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { View, Text, ScrollView } from "@tarojs/components";
|
|||||||
import { Avatar } from "@nutui/nutui-react-taro";
|
import { Avatar } from "@nutui/nutui-react-taro";
|
||||||
import { withAuth, EmptyState } from "@/components";
|
import { withAuth, EmptyState } from "@/components";
|
||||||
import FollowService from "@/services/followService";
|
import FollowService from "@/services/followService";
|
||||||
|
import { formatShortRelativeTime } from "@/utils/timeUtils";
|
||||||
import Taro from "@tarojs/taro";
|
import Taro from "@tarojs/taro";
|
||||||
import "./index.scss";
|
import "./index.scss";
|
||||||
|
|
||||||
@@ -63,33 +64,6 @@ const NewFollow = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 格式化时间显示
|
|
||||||
const formatTime = (timeStr: string) => {
|
|
||||||
if (!timeStr) return "";
|
|
||||||
|
|
||||||
const date = new Date(timeStr);
|
|
||||||
const now = new Date();
|
|
||||||
const diff = now.getTime() - date.getTime();
|
|
||||||
const minutes = Math.floor(diff / (1000 * 60));
|
|
||||||
const hours = Math.floor(diff / (1000 * 60 * 60));
|
|
||||||
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
||||||
|
|
||||||
if (minutes < 1) {
|
|
||||||
return "刚刚";
|
|
||||||
} else if (minutes < 60) {
|
|
||||||
return `${minutes}分钟前`;
|
|
||||||
} else if (hours < 24) {
|
|
||||||
return `${hours}小时前`;
|
|
||||||
} else if (days === 1) {
|
|
||||||
return "1天前";
|
|
||||||
} else if (days < 7) {
|
|
||||||
return `${days}天前`;
|
|
||||||
} else {
|
|
||||||
const month = date.getMonth() + 1;
|
|
||||||
const day = date.getDate();
|
|
||||||
return `${month}月${day}日`;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 处理回关/取消关注
|
// 处理回关/取消关注
|
||||||
const handleFollowBack = async (item: FollowItem) => {
|
const handleFollowBack = async (item: FollowItem) => {
|
||||||
@@ -202,7 +176,7 @@ const NewFollow = () => {
|
|||||||
<Text className="user-signature">{item.user_signature}</Text>
|
<Text className="user-signature">{item.user_signature}</Text>
|
||||||
) : (
|
) : (
|
||||||
<View className="action-row">
|
<View className="action-row">
|
||||||
<Text className="action-text">{formatTime(item.time)}关注了你</Text>
|
<Text className="action-text">{formatShortRelativeTime(item.time)}关注了你</Text>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ const QueryTransactions = () => {
|
|||||||
const format_time = (time: string) => {
|
const format_time = (time: string) => {
|
||||||
time = time.replace(/-/g, "/");
|
time = time.replace(/-/g, "/");
|
||||||
const date = new Date(time);
|
const date = new Date(time);
|
||||||
|
const year = String(date.getFullYear());
|
||||||
const month = String(date.getMonth() + 1).padStart(2, "0");
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
||||||
const day = String(date.getDate()).padStart(2, "0");
|
const day = String(date.getDate()).padStart(2, "0");
|
||||||
const hours = String(date.getHours()).padStart(2, "0");
|
const hours = String(date.getHours()).padStart(2, "0");
|
||||||
@@ -192,7 +193,7 @@ const QueryTransactions = () => {
|
|||||||
const seconds = String(date.getSeconds()).padStart(2, "0");
|
const seconds = String(date.getSeconds()).padStart(2, "0");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
date: `2025-${month}-${day}`,
|
date: `${year}-${month}-${day}`,
|
||||||
time: `${hours}:${minutes}:${seconds}`,
|
time: `${hours}:${minutes}:${seconds}`,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -377,6 +377,7 @@ const WalletPage: React.FC = () => {
|
|||||||
const format_time = (time: string) => {
|
const format_time = (time: string) => {
|
||||||
time = time.replace(/-/g, "/");
|
time = time.replace(/-/g, "/");
|
||||||
const date = new Date(time);
|
const date = new Date(time);
|
||||||
|
const year = String(date.getFullYear());
|
||||||
const month = String(date.getMonth() + 1).padStart(2, "0");
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
||||||
const day = String(date.getDate()).padStart(2, "0");
|
const day = String(date.getDate()).padStart(2, "0");
|
||||||
const hours = String(date.getHours()).padStart(2, "0");
|
const hours = String(date.getHours()).padStart(2, "0");
|
||||||
@@ -384,7 +385,7 @@ const WalletPage: React.FC = () => {
|
|||||||
const seconds = String(date.getSeconds()).padStart(2, "0");
|
const seconds = String(date.getSeconds()).padStart(2, "0");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
date: `2025-${month}-${day}`,
|
date: `${year}-${month}-${day}`,
|
||||||
time: `${hours}:${minutes}:${seconds}`,
|
time: `${hours}:${minutes}:${seconds}`,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,3 +79,107 @@ export const getTime = (time: string): string => {
|
|||||||
|
|
||||||
return `${hour12}:${minuteStr} ${period}`
|
return `${hour12}:${minuteStr} ${period}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化时间显示(相对时间)
|
||||||
|
* @param timeStr 时间字符串
|
||||||
|
* @returns 格式化后的时间字符串
|
||||||
|
*/
|
||||||
|
export const formatRelativeTime = (timeStr: string): string => {
|
||||||
|
if (!timeStr) return "";
|
||||||
|
|
||||||
|
const date = new Date(timeStr);
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// 获取日期部分(年-月-日),忽略时间
|
||||||
|
const getDateString = (d: Date) => {
|
||||||
|
const year = d.getFullYear();
|
||||||
|
const month = d.getMonth() + 1;
|
||||||
|
const day = d.getDate();
|
||||||
|
return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const dateStr = getDateString(date);
|
||||||
|
const nowStr = getDateString(now);
|
||||||
|
|
||||||
|
// 计算日期差
|
||||||
|
const dateObj = new Date(dateStr);
|
||||||
|
const nowObj = new Date(nowStr);
|
||||||
|
const diffTime = nowObj.getTime() - dateObj.getTime();
|
||||||
|
const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
|
||||||
|
if (diffDays === 0) {
|
||||||
|
// 今天
|
||||||
|
const hours = date.getHours();
|
||||||
|
const minutes = date.getMinutes();
|
||||||
|
return `今天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
||||||
|
} else if (diffDays === 1) {
|
||||||
|
// 昨天
|
||||||
|
const hours = date.getHours();
|
||||||
|
const minutes = date.getMinutes();
|
||||||
|
return `昨天 ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
||||||
|
} else if (diffDays < 7) {
|
||||||
|
// 一周内显示天数
|
||||||
|
return `${diffDays}天前`;
|
||||||
|
} else {
|
||||||
|
// 超过一周显示完整日期
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = date.getMonth() + 1;
|
||||||
|
const day = date.getDate();
|
||||||
|
const hours = date.getHours();
|
||||||
|
const minutes = date.getMinutes();
|
||||||
|
return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化时间显示(简短相对时间)
|
||||||
|
* @param timeStr 时间字符串
|
||||||
|
* @returns 格式化后的时间字符串
|
||||||
|
*/
|
||||||
|
export const formatShortRelativeTime = (timeStr: string): string => {
|
||||||
|
if (!timeStr) return "";
|
||||||
|
|
||||||
|
const date = new Date(timeStr);
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
// 获取日期部分(年-月-日),忽略时间
|
||||||
|
const getDateString = (d: Date) => {
|
||||||
|
const year = d.getFullYear();
|
||||||
|
const month = d.getMonth() + 1;
|
||||||
|
const day = d.getDate();
|
||||||
|
return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const dateStr = getDateString(date);
|
||||||
|
const nowStr = getDateString(now);
|
||||||
|
|
||||||
|
// 计算日期差
|
||||||
|
const dateObj = new Date(dateStr);
|
||||||
|
const nowObj = new Date(nowStr);
|
||||||
|
const diffTime = nowObj.getTime() - dateObj.getTime();
|
||||||
|
const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
|
||||||
|
// 如果是今天,显示具体时间
|
||||||
|
if (diffDays === 0) {
|
||||||
|
const diff = now.getTime() - date.getTime();
|
||||||
|
const minutes = Math.floor(diff / (1000 * 60));
|
||||||
|
const hours = Math.floor(diff / (1000 * 60 * 60));
|
||||||
|
|
||||||
|
if (minutes < 1) {
|
||||||
|
return "刚刚";
|
||||||
|
} else if (minutes < 60) {
|
||||||
|
return `${minutes}分钟前`;
|
||||||
|
} else {
|
||||||
|
return `${hours}小时前`;
|
||||||
|
}
|
||||||
|
} else if (diffDays === 1) {
|
||||||
|
return "1天前";
|
||||||
|
} else if (diffDays < 7) {
|
||||||
|
return `${diffDays}天前`;
|
||||||
|
} else {
|
||||||
|
const month = date.getMonth() + 1;
|
||||||
|
const day = date.getDate();
|
||||||
|
return `${month}月${day}日`;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user