Skip to content

Commit a195e88

Browse files
committed
fix: 修复 timestamp2string1 跨年显示问题,仅在数据跨年时显示年份
1 parent d06915c commit a195e88

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

web/src/helpers/dashboard.jsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
import {
2727
timestamp2string,
2828
timestamp2string1,
29+
isDataCrossYear,
2930
copy,
3031
showSuccess,
3132
} from './utils';
@@ -259,13 +260,16 @@ export const processRawData = (
259260
timeCountMap: new Map(),
260261
};
261262

263+
// 检查数据是否跨年
264+
const showYear = isDataCrossYear(data.map(item => item.created_at));
265+
262266
data.forEach((item) => {
263267
result.uniqueModels.add(item.model_name);
264268
result.totalTokens += item.token_used;
265269
result.totalQuota += item.quota;
266270
result.totalTimes += item.count;
267271

268-
const timeKey = timestamp2string1(item.created_at, dataExportDefaultTime);
272+
const timeKey = timestamp2string1(item.created_at, dataExportDefaultTime, showYear);
269273
if (!result.timePoints.includes(timeKey)) {
270274
result.timePoints.push(timeKey);
271275
}
@@ -323,8 +327,11 @@ export const calculateTrendData = (
323327
export const aggregateDataByTimeAndModel = (data, dataExportDefaultTime) => {
324328
const aggregatedData = new Map();
325329

330+
// 检查数据是否跨年
331+
const showYear = isDataCrossYear(data.map(item => item.created_at));
332+
326333
data.forEach((item) => {
327-
const timeKey = timestamp2string1(item.created_at, dataExportDefaultTime);
334+
const timeKey = timestamp2string1(item.created_at, dataExportDefaultTime, showYear);
328335
const modelKey = item.model_name;
329336
const key = `${timeKey}-${modelKey}`;
330337

@@ -358,10 +365,15 @@ export const generateChartTimePoints = (
358365
const lastTime = Math.max(...data.map((item) => item.created_at));
359366
const interval = getTimeInterval(dataExportDefaultTime, true);
360367

361-
chartTimePoints = Array.from(
368+
// 生成时间点数组,用于检查是否跨年
369+
const generatedTimestamps = Array.from(
362370
{ length: DEFAULTS.MAX_TREND_POINTS },
363-
(_, i) =>
364-
timestamp2string1(lastTime - (6 - i) * interval, dataExportDefaultTime),
371+
(_, i) => lastTime - (6 - i) * interval,
372+
);
373+
const showYear = isDataCrossYear(generatedTimestamps);
374+
375+
chartTimePoints = generatedTimestamps.map(ts =>
376+
timestamp2string1(ts, dataExportDefaultTime, showYear),
365377
);
366378
}
367379

web/src/helpers/utils.jsx

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -217,15 +217,12 @@ export function timestamp2string(timestamp) {
217217
);
218218
}
219219

220-
export function timestamp2string1(timestamp, dataExportDefaultTime = 'hour') {
220+
export function timestamp2string1(timestamp, dataExportDefaultTime = 'hour', showYear = false) {
221221
let date = new Date(timestamp * 1000);
222-
// let year = date.getFullYear().toString();
222+
let year = date.getFullYear();
223223
let month = (date.getMonth() + 1).toString();
224224
let day = date.getDate().toString();
225225
let hour = date.getHours().toString();
226-
if (day === '24') {
227-
console.log('timestamp', timestamp);
228-
}
229226
if (month.length === 1) {
230227
month = '0' + month;
231228
}
@@ -235,11 +232,13 @@ export function timestamp2string1(timestamp, dataExportDefaultTime = 'hour') {
235232
if (hour.length === 1) {
236233
hour = '0' + hour;
237234
}
238-
let str = month + '-' + day;
235+
// 仅在跨年时显示年份
236+
let str = showYear ? year + '-' + month + '-' + day : month + '-' + day;
239237
if (dataExportDefaultTime === 'hour') {
240238
str += ' ' + hour + ':00';
241239
} else if (dataExportDefaultTime === 'week') {
242240
let nextWeek = new Date(timestamp * 1000 + 6 * 24 * 60 * 60 * 1000);
241+
let nextWeekYear = nextWeek.getFullYear();
243242
let nextMonth = (nextWeek.getMonth() + 1).toString();
244243
let nextDay = nextWeek.getDate().toString();
245244
if (nextMonth.length === 1) {
@@ -248,11 +247,20 @@ export function timestamp2string1(timestamp, dataExportDefaultTime = 'hour') {
248247
if (nextDay.length === 1) {
249248
nextDay = '0' + nextDay;
250249
}
251-
str += ' - ' + nextMonth + '-' + nextDay;
250+
// 周视图结束日期也仅在跨年时显示年份
251+
let nextStr = showYear ? nextWeekYear + '-' + nextMonth + '-' + nextDay : nextMonth + '-' + nextDay;
252+
str += ' - ' + nextStr;
252253
}
253254
return str;
254255
}
255256

257+
// 检查时间戳数组是否跨年
258+
export function isDataCrossYear(timestamps) {
259+
if (!timestamps || timestamps.length === 0) return false;
260+
const years = new Set(timestamps.map(ts => new Date(ts * 1000).getFullYear()));
261+
return years.size > 1;
262+
}
263+
256264
export function downloadTextAsFile(text, filename) {
257265
let blob = new Blob([text], { type: 'text/plain;charset=utf-8' });
258266
let url = URL.createObjectURL(blob);

0 commit comments

Comments
 (0)