Blame view

src/components/time/time.js 3.21 KB
de30f1b3   梁灏   update Time func
1
2
3
4
5
  /**
   * @param {Number} timeStamp 判断时间戳格式是否是毫秒
   * @returns {Boolean}
   */
  // const isMillisecond = timeStamp => {
28295360   梁灏   update Time logic
6
7
8
  //     const timeStr = String(timeStamp)
  //     return timeStr.length > 10
  // }
eb37e68c   梁灏   update Time
9
  
de30f1b3   梁灏   update Time func
10
11
12
13
14
15
16
17
  /**
   * @param {Number} timeStamp 传入的时间戳
   * @param {Number} currentTime 当前时间时间戳
   * @returns {Boolean} 传入的时间戳是否早于当前时间戳
   */
  const isEarly = (timeStamp, currentTime) => {
      return timeStamp < currentTime;
  };
eb37e68c   梁灏   update Time
18
  
de30f1b3   梁灏   update Time func
19
20
21
22
23
24
25
26
  /**
   * @param {Number} num 数值
   * @returns {String} 处理后的字符串
   * @description 如果传入的数值小于10,即位数只有1位,则在前面补充0
   */
  const getHandledValue = num => {
      return num < 10 ? '0' + num : num;
  };
eb37e68c   梁灏   update Time
27
  
de30f1b3   梁灏   update Time func
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  /**
   * @param {Number} timeStamp 传入的时间戳
   * @param {Number} startType 要返回的时间字符串的格式类型,传入'year'则返回年开头的完整时间
   */
  const getDate = (timeStamp, startType) => {
      const d = new Date(timeStamp * 1000);
      const year = d.getFullYear();
      const month = getHandledValue(d.getMonth() + 1);
      const date = getHandledValue(d.getDate());
      const hours = getHandledValue(d.getHours());
      const minutes = getHandledValue(d.getMinutes());
      const second = getHandledValue(d.getSeconds());
      let resStr = '';
      if (startType === 'year') resStr = year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + second;
      else resStr = month + '-' + date + ' ' + hours + ':' + minutes;
      return resStr;
  };
eb37e68c   梁灏   update Time
45
  
de30f1b3   梁灏   update Time func
46
47
48
49
50
51
  /**
   * @param {String|Number} timeStamp 时间戳
   * @returns {String} 相对时间字符串
   */
  export const getRelativeTime = timeStamp => {
      // 判断当前传入的时间戳是秒格式还是毫秒
de30f1b3   梁灏   update Time func
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
      const IS_MILLISECOND = true;
      // 如果是毫秒格式则转为秒格式
      if (IS_MILLISECOND) Math.floor(timeStamp /= 1000);
      // 传入的时间戳可以是数值或字符串类型,这里统一转为数值类型
      timeStamp = Number(timeStamp);
      // 获取当前时间时间戳
      const currentTime = Math.floor(Date.parse(new Date()) / 1000);
      // 判断传入时间戳是否早于当前时间戳
      const IS_EARLY = isEarly(timeStamp, currentTime);
      // 获取两个时间戳差值
      let diff = currentTime - timeStamp;
      // 如果IS_EARLY为false则差值取反
      if (!IS_EARLY) diff = -diff;
      let resStr = '';
      const dirStr = IS_EARLY ? '前' : '后';
      // 少于等于59秒
      if (diff <= 59) resStr = diff + '秒' + dirStr;
      // 多于59秒,少于等于59分钟59秒
      else if (diff > 59 && diff <= 3599) resStr = Math.floor(diff / 60) + '分钟' + dirStr;
      // 多于59分钟59秒,少于等于23小时59分钟59秒
      else if (diff > 3599 && diff <= 86399) resStr = Math.floor(diff / 3600) + '小时' + dirStr;
      // 多于23小时59分钟59秒,少于等于29天59分钟59秒
      else if (diff > 86399 && diff <= 2623859) resStr = Math.floor(diff / 86400) + '天' + dirStr;
28295360   梁灏   update Time logic
75
76
      // 多于29天59分钟59秒,少于364天23小时59分钟59秒,且传入的时间戳早于当前
      else if (diff > 2623859 && diff <= 31567859 && IS_EARLY) resStr = getDate(timeStamp);
de30f1b3   梁灏   update Time func
77
78
      else resStr = getDate(timeStamp, 'year');
      return resStr;
eb37e68c   梁灏   update Time
79
80
81
  };
  
  export default function (timestamp) {
de30f1b3   梁灏   update Time func
82
      return getRelativeTime(timestamp);
eb37e68c   梁灏   update Time
83
  }