参数相关

  • date为传入时间 例:“2023/5/10 11:32:01” 2023-02-01 09:32:01
  • type为返回类型 例:- / 年月日 年
  • 默认规则,大于等于一天(24小时)展示'X天前;大于等于30天且小于365天展示'X个月前';大于等于365天且展示'x年前',否则按照传入参数规则展示
  • zeroFillFlag参数为是否数字补零,默认补零
  • 时间参数date为必写参数

时间处理公式依据

  • 10秒: 10 * 1000
  • 1分钟: 60 * 1000
  • 1小时: 60 * 60 * 1000
  • 24小时(一天):60 * 60 * 24 * 1000
 1    const formatPast = (date, type = "default", zeroFillFlag = true) => {
 2        
 3        let countTime;
 4        
 5        let time = new Date().getTime();
 6        
 7        let afferentTime = new Date(date).getTime();
 8        
 9        time = Number.parseInt(`${time - afferentTime}`);
10        let typeList = ['default', '-', '/', '.', '年月日', '月日', '年']
11        if (time < 0 || (typeof time === 'number' && isNaN(time)) || !date) {
12            
13            return alert("请查看时间参数是否满足规则:\n1、时间参数为必填参数且为过去时间 \n2、时间参数不合法(参考date参数规则)");
14        } else if ((zeroFillFlag && typeof zeroFillFlag !== 'boolean') || (type && !typeList.includes(type))) {
15            
16            return alert("请查看补零参数/格式参数是否满足规则:\n1、补零参数为布尔值类型 \n2、格式参数不合法(参考type参数规则)");
17        } else if (time < 10000) {
18            
19            return "刚刚";
20        } else if (time < 60000) {
21            
22            countTime = Math.floor(time / 1000);
23            return `${countTime}秒前`;
24        } else if (time < 3600000) {
25            
26            countTime = Math.floor(time / 60000);
27            return `${countTime}分钟前`;
28        } else if (time < 86400000) {
29            
30            countTime = Math.floor(time / 3600000);
31            return `${countTime}小时前`;
32        } else if (time >= 86400000 && type == "default") {
33            
34            countTime = Math.floor(time / 86400000);
35            
36            if (countTime >= 365) {
37                return `${Math.floor(countTime / 365)}年前`;
38            }
39            
40            if (countTime >= 30) {
41                return `${Math.floor(countTime / 30)}个月前`;
42            }
43            return `${countTime}天前`;
44        } else {
45            
46            
47            let Y = new Date(date).getFullYear();
48            let M = new Date(date).getMonth() + 1;
49            let zeroFillM = M > 9 ? M : "0" + M;
50            let D = new Date(date).getDate();
51            let zeroFillD = D > 9 ? D : "0" + D;
52            
53            if (type == "-" || type == "/" || type == ".") {
54                return zeroFillFlag
55                    ? Y + type + zeroFillM + type + zeroFillD
56                    : Y + type + M + type + D;
57            }
58            
59            if (type == "年月日") {
60                return zeroFillFlag
61                    ? Y + type[0] + zeroFillM + type[1] + zeroFillD + type[2]
62                    : Y + type[0] + M + type[1] + D + type[2];
63            }
64            
65            if (type == "月日") {
66                return zeroFillFlag
67                    ? zeroFillM + type[0] + zeroFillD + type[1]
68                    : M + type[0] + D + type[1]
69            }
70            
71            if (type == "年") {
72                return Y + type
73            }
74
75        }
76    };
77    
78    
79    
80    
81    console.log(formatPast("2024-1-1 11:11:11")); 
82    console.log(formatPast("2023-11-1 11:11:11")); 
83    console.log(formatPast("2015-07-10 21:32:01")); 
84    console.log(formatPast("2023-02-01 09:32:01", "-", false)); 
85    console.log(formatPast("2023.12.8 19:32:01", "/")); 
86    console.log(formatPast("2023.12.8 19:32:01", ".")); 
87    console.log(formatPast("2023/5/10 11:32:01", "年月日")); 
88    console.log(formatPast("2023/6/25 11:32:01", "月日", false)); 
89    console.log(formatPast("2023/8/08 11:32:01", "年")); 
个人笔记记录 2021 ~ 2025