/**
|
* @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}`;
|
}
|
};
|