hookehuyr

fix: 修复 formatDatetime 函数处理跨午夜时间显示问题

重构日期时间格式化逻辑,使用 dayjs 库替代字符串切片以提升健壮性。新增对跨午夜至 00:00 情况的特殊处理,将其显示为 24:00,使时间区间表达更符合日常习惯。
...@@ -71,11 +71,31 @@ const strExist = (array, str) => { ...@@ -71,11 +71,31 @@ const strExist = (array, str) => {
71 return exist.length > 0 71 return exist.length > 0
72 } 72 }
73 73
74 -const formatDatetime = (data) => { // 格式化日期 74 +const formatDatetime = (data) => {
75 - let begin_time = data?.begin_time.slice(0, -6); 75 + if (!data || !data.begin_time || !data.end_time) return '';
76 - let end_time = data?.end_time.slice(0, -6); 76 +
77 - let str = begin_time + ' ' + end_time; 77 + const normalize = (timeStr) => {
78 - return `${str.split(' ')[0]} ${str.split(' ')[1]}-${str.split(' ')[3]}`; 78 + if (!timeStr) return '';
79 + let clean = timeStr.split('+')[0];
80 + clean = clean.split('Z')[0];
81 + clean = clean.trim().replace(/\s+/, 'T');
82 + return clean;
83 + };
84 +
85 + const start = dayjs(normalize(data.begin_time));
86 + const end = dayjs(normalize(data.end_time));
87 +
88 + if (!start.isValid() || !end.isValid()) return '';
89 +
90 + const isNextDayMidnight =
91 + end.diff(start, 'day') === 1 &&
92 + end.hour() === 0 &&
93 + end.minute() === 0 &&
94 + end.second() === 0;
95 +
96 + const endTimeText = isNextDayMidnight ? '24:00' : end.format('HH:mm');
97 +
98 + return `${start.format('YYYY-MM-DD')} ${start.format('HH:mm')}-${endTimeText}`;
79 } 99 }
80 100
81 export { formatDate, wxInfo, hasEllipsis, parseQueryString, strExist, formatDatetime }; 101 export { formatDate, wxInfo, hasEllipsis, parseQueryString, strExist, formatDatetime };
......