hookehuyr

fix: 将次日零点的时间格式化为24:00

避免将次日零点显示为00:00,改为显示24:00以明确表示当天结束时间
1 /* 1 /*
2 * @Date: 2022-04-18 15:59:42 2 * @Date: 2022-04-18 15:59:42
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2026-01-18 00:18:39 4 + * @LastEditTime: 2026-01-23 15:18:16
5 - * @FilePath: /xyxBooking-weapp/src/utils/tools.js 5 + * @FilePath: /git/xyxBooking-weapp/src/utils/tools.js
6 * @Description: 工具函数库 6 * @Description: 工具函数库
7 */ 7 */
8 import dayjs from 'dayjs'; 8 import dayjs from 'dayjs';
...@@ -87,18 +87,12 @@ const strExist = (array, str) => { ...@@ -87,18 +87,12 @@ const strExist = (array, str) => {
87 * 3. 该函数默认截取时间字符串前19位(slice(0, -6)),需根据实际时间格式调整截取长度 87 * 3. 该函数默认截取时间字符串前19位(slice(0, -6)),需根据实际时间格式调整截取长度
88 */ 88 */
89 const formatDatetime = (data) => { 89 const formatDatetime = (data) => {
90 - // 格式化日期
91 if (!data || !data.begin_time || !data.end_time) return ''; 90 if (!data || !data.begin_time || !data.end_time) return '';
92 91
93 - // 预处理函数:移除时区后缀,统一格式为 ISO 8601 (YYYY-MM-DDTHH:mm:ss)
94 - // 这样做是为了让 dayjs 把它当作本地时间处理,避免时区转换导致的时间偏差(始终显示景点当地时间/字面时间)
95 const normalize = (timeStr) => { 92 const normalize = (timeStr) => {
96 if (!timeStr) return ''; 93 if (!timeStr) return '';
97 - // 移除 +08, +08:00 等时区后缀
98 let clean = timeStr.split('+')[0]; 94 let clean = timeStr.split('+')[0];
99 - // 移除 Z 后缀
100 clean = clean.split('Z')[0]; 95 clean = clean.split('Z')[0];
101 - // 将空格替换为 T,确保兼容性
102 clean = clean.trim().replace(/\s+/, 'T'); 96 clean = clean.trim().replace(/\s+/, 'T');
103 return clean; 97 return clean;
104 }; 98 };
...@@ -108,7 +102,15 @@ const formatDatetime = (data) => { ...@@ -108,7 +102,15 @@ const formatDatetime = (data) => {
108 102
109 if (!start.isValid() || !end.isValid()) return ''; 103 if (!start.isValid() || !end.isValid()) return '';
110 104
111 - return `${start.format('YYYY-MM-DD')} ${start.format('HH:mm')}-${end.format('HH:mm')}`; 105 + const isNextDayMidnight =
106 + end.diff(start, 'day') === 1 &&
107 + end.hour() === 0 &&
108 + end.minute() === 0 &&
109 + end.second() === 0;
110 +
111 + const endTimeText = isNextDayMidnight ? '24:00' : end.format('HH:mm');
112 +
113 + return `${start.format('YYYY-MM-DD')} ${start.format('HH:mm')}-${endTimeText}`;
112 }; 114 };
113 115
114 /** 116 /**
......