zhouxiantao
8 days ago 03193b2a27a2c23e10f3a2f298de9c1142116780
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
 * @author 韩天尊
 * @time 2024-01-15
 * @version 1.0.0
 * @description 时间格式化工具函数
 */
 
/**
 * 格式化活动时间显示
 * @param startTime 开始时间
 * @param endTime 结束时间
 * @param fallbackTime 备用时间(如果startTime和endTime都不存在)
 * @returns 格式化后的时间字符串
 */
export const formatActivityTime = (
    startTime?: string, 
    endTime?: string, 
    fallbackTime?: string
): string => {
    // 如果没有开始时间和结束时间,使用备用时间
    if (!startTime && !endTime) {
        return fallbackTime || '';
    }
 
    // 如果只有开始时间,直接返回
    if (!endTime) {
        return startTime || '';
    }
 
    // 如果只有结束时间,直接返回
    if (!startTime) {
        return endTime || '';
    }
 
    try {
        const startDate = new Date(startTime);
        const endDate = new Date(endTime);
 
        // 检查日期是否有效
        if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) {
            return fallbackTime || `${startTime} - ${endTime}`;
        }
 
        // 格式化日期为 yyyy-MM-dd HH:mm
        const formatDateTime = (date: Date): string => {
            const year = date.getFullYear();
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const day = String(date.getDate()).padStart(2, '0');
            const hours = String(date.getHours()).padStart(2, '0');
            const minutes = String(date.getMinutes()).padStart(2, '0');
            return `${year}-${month}-${day} ${hours}:${minutes}`;
        };
 
        // 格式化时间为 HH:mm
        const formatTime = (date: Date): string => {
            const hours = String(date.getHours()).padStart(2, '0');
            const minutes = String(date.getMinutes()).padStart(2, '0');
            return `${hours}:${minutes}`;
        };
 
        // 检查是否在同一天
        const isSameDay = 
            startDate.getFullYear() === endDate.getFullYear() &&
            startDate.getMonth() === endDate.getMonth() &&
            startDate.getDate() === endDate.getDate();
 
        if (isSameDay) {
            // 同一天:yyyy-MM-dd HH:mm - HH:mm
            const dateStr = formatDateTime(startDate).split(' ')[0]; // 获取日期部分
            const startTimeStr = formatTime(startDate);
            const endTimeStr = formatTime(endDate);
            return `${dateStr} ${startTimeStr} - ${endTimeStr}`;
        } else {
            // 不同天:yyyy-MM-dd HH:mm - yyyy-MM-dd HH:mm
            return `${formatDateTime(startDate)} - ${formatDateTime(endDate)}`;
        }
    } catch (error) {
        // 如果格式化失败,返回原始字符串
        return fallbackTime || `${startTime} - ${endTime}`;
    }
};