| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // utils/dateUtils.js
- /**
- * 智能时间格式化:返回 "今天 18:00"、"昨天 18:00" 等
- */
- export function formatSmartTime(timeStr) {
- if (!timeStr) return '未知';
- // iOS兼容格式
- const safeStr = timeStr.replace(' ', 'T');
- const inputDate = new Date(safeStr);
- if (isNaN(inputDate.getTime())) return '时间格式错误';
- const now = new Date();
- const inputDayStart = new Date(inputDate.getFullYear(), inputDate.getMonth(), inputDate.getDate());
- const nowDayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate());
- const diffTime = nowDayStart - inputDayStart;
- const oneDay = 1000 * 60 * 60 * 24;
- const timePart = inputDate.toTimeString().slice(0, 5); // HH:mm
- if (diffTime === 0) {
- return `今天 ${timePart}`;
- } else if (diffTime === oneDay) {
- return `昨天 ${timePart}`;
- } else if (diffTime === oneDay * 2) {
- return `前天 ${timePart}`;
- } else {
- return `${inputDate.getMonth() + 1}月${inputDate.getDate()}日 ${timePart}`;
- }
- }
- /**
- * 相对时间格式化:返回 "刚刚更新"、"5分钟前更新"、"3天前更新" 等
- */
- export function formatDate(dateStr) {
- if (!dateStr) return '未知';
- const parsedStr = dateStr.replace(' ', 'T');
- const date = new Date(parsedStr);
- if (isNaN(date.getTime())) return '无效时间';
- const now = new Date();
- const diff = Math.floor((now - date) / 1000 / 60); // 单位:分钟
- if (diff < 1) return '刚刚更新';
- if (diff < 5) return '1分钟前更新';
- if (diff < 10) return '5分钟前更新';
- if (diff < 60) return `${diff}分钟前更新`;
- if (diff < 120) return '1小时前更新';
- if (diff < 24 * 60) return `${Math.floor(diff / 60)}小时前更新`;
- if (diff < 7 * 24 * 60) return `${Math.floor(diff / (60 * 24))}天前更新`;
- return parsedStr.split('T')[0] + ' 更新';
- }
- export function getFormattedTime() {
- const now = new Date();
- const pad = n => n < 10 ? '0' + n : n;
- const year = now.getFullYear();
- const month = pad(now.getMonth() + 1);
- const day = pad(now.getDate());
- const hours = pad(now.getHours());
- const minutes = pad(now.getMinutes());
- const seconds = pad(now.getSeconds());
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
- }
|