fix(admin): 修复时区转换和时间显示格式问题

- 修复小时粒度下时间显示为完整日期的问题
- 修复时区转换逻辑,使用正确的UTC偏移计算
- 统一时间标签格式:小时粒度显示MM/DD HH:00,天粒度显示MM/DD
- 修复图表时间显示比实际时间快7小时的问题
This commit is contained in:
shaw
2025-07-30 09:42:09 +08:00
parent 61b1a0ec32
commit 5503004b66
3 changed files with 22 additions and 5 deletions

View File

@@ -5,8 +5,9 @@ const logger = require('../utils/logger');
// 时区辅助函数
function getDateInTimezone(date = new Date()) {
const offset = config.system.timezoneOffset || 8; // 默认UTC+8
const utcTime = date.getTime() + (date.getTimezoneOffset() * 60000);
const targetTime = new Date(utcTime + (offset * 3600000));
// 直接基于UTC时间计算目标时区时间
// 不需要考虑本地时区因为我们总是基于UTC
const targetTime = new Date(date.getTime() + (offset * 3600000));
return targetTime;
}

View File

@@ -1341,8 +1341,8 @@ router.get('/usage-trend', authenticateAdmin, async (req, res) => {
}
trendData.push({
date: dateStr, // 保持日期格式一致
hour: currentHour.toISOString(),
// 对于小时粒度只返回hour字段不返回date字段
hour: tzCurrentHour.toISOString(), // 使用转换后的时区时间
inputTokens: hourInputTokens,
outputTokens: hourOutputTokens,
requests: hourRequests,
@@ -1710,7 +1710,7 @@ router.get('/api-keys-usage-trend', authenticateAdmin, async (req, res) => {
const keys = await client.keys(pattern);
const hourData = {
hour: currentHour.toISOString(),
hour: tzCurrentHour.toISOString(), // 使用转换后的时区时间
apiKeys: {}
};

View File

@@ -452,6 +452,14 @@ function createUsageTrendChart() {
const hour = String(date.getHours()).padStart(2, '0')
return `${month}/${day} ${hour}:00`
}
// 按天显示时,只显示月/日,不显示年份
const dateStr = d.date
if (dateStr && dateStr.includes('-')) {
const parts = dateStr.split('-')
if (parts.length >= 3) {
return `${parts[1]}/${parts[2]}`
}
}
return d.date
})
@@ -655,6 +663,14 @@ function createApiKeysUsageTrendChart() {
const hour = String(date.getHours()).padStart(2, '0')
return `${month}/${day} ${hour}:00`
}
// 按天显示时,只显示月/日,不显示年份
const dateStr = d.date
if (dateStr && dateStr.includes('-')) {
const parts = dateStr.split('-')
if (parts.length >= 3) {
return `${parts[1]}/${parts[2]}`
}
}
return d.date
}),
datasets: datasets