/** * 时间格式化工具 * 用于任务时间的计算和格式化 */ /** * 将秒数格式化为"XX分钟"显示 * @param {number} durationInSeconds - 持续时间(秒) * @returns {string} 格式化后的时间字符串 */ export const formatMinutes = (durationInSeconds) => { if (!durationInSeconds && durationInSeconds !== 0) return '0分钟'; const minutes = Math.floor(durationInSeconds / 60); return `${minutes}分钟`; }; /** * 计算从startTime到现在的分钟数 * @param {string|number} startTime - 开始时间戳(毫秒) * @returns {number} 持续时间(秒) */ export const calculateDuration = (startTime) => { if (!startTime) return 0; const start = typeof startTime === 'string' ? parseInt(startTime, 10) : startTime; const now = Date.now(); const durationMs = now - start; // 转换为秒数 return Math.floor(durationMs / 1000); }; /** * 获取页面加载时间作为降级方案的开始时间 * @returns {number} 页面加载时间戳(毫秒) */ export const getFallbackStartTime = () => { // 使用performance.timing.navigationStart作为更精确的页面加载时间 if (typeof performance !== 'undefined' && performance.timing) { return performance.timing.navigationStart; } // 降级到Date.now() return Date.now(); }; /** * 解析API返回的时间字符串为时间戳 * @param {string} timeString - 时间字符串(如"2026-01-30 09:30:00") * @returns {number} 时间戳(毫秒) */ export const parseTimeString = (timeString) => { if (!timeString) return null; // 处理 "YYYY-MM-DD HH:mm:ss" 格式 const date = new Date(timeString.replace(' ', 'T')); return isNaN(date.getTime()) ? null : date.getTime(); };