diff --git a/src/models/redis.js b/src/models/redis.js index 9473724b..29efdca1 100644 --- a/src/models/redis.js +++ b/src/models/redis.js @@ -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; } diff --git a/src/routes/admin.js b/src/routes/admin.js index e3d118e8..b4a4a088 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -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: {} }; diff --git a/web/admin-spa/src/views/DashboardView.vue b/web/admin-spa/src/views/DashboardView.vue index c114249c..014d976c 100644 --- a/web/admin-spa/src/views/DashboardView.vue +++ b/web/admin-spa/src/views/DashboardView.vue @@ -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