tony.cheng
2026-02-04 ce77556eebb6896903be1dc8ac3202b42b96649d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
 * 时间格式化工具
 * 用于任务时间的计算和格式化
 */
 
/**
 * 将秒数格式化为"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();
};