mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 09:06:18 +00:00
fix(admin-spa): 修正时区计算双重偏移问题
- 重写getSystemTimezoneDay函数,修复之前的双重偏移错误 - 简化时间计算逻辑,直接使用Date.UTC创建系统时区时间 - 移除不必要的getDateInSystemTimezone调用 问题原因: 之前的实现在计算系统时区日期时进行了双重偏移,导致时间范围错误 修复后: - 正确计算系统时区某一天的起止UTC时间 - "昨天"选项现在正确显示系统时区的完整一天(如29号0:00到29号23:59) - 适配所有时区的用户,不依赖用户浏览器时区 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2
web/admin-spa/dist/index.html
vendored
2
web/admin-spa/dist/index.html
vendored
@@ -18,7 +18,7 @@
|
|||||||
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
|
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
|
||||||
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
|
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net">
|
||||||
<link rel="dns-prefetch" href="https://cdnjs.cloudflare.com">
|
<link rel="dns-prefetch" href="https://cdnjs.cloudflare.com">
|
||||||
<script type="module" crossorigin src="/admin-next/assets/index-B6gXCBSA.js"></script>
|
<script type="module" crossorigin src="/admin-next/assets/index-CJ53_Ylg.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="/admin-next/assets/vue-vendor-CKToUHZx.js">
|
<link rel="modulepreload" crossorigin href="/admin-next/assets/vue-vendor-CKToUHZx.js">
|
||||||
<link rel="modulepreload" crossorigin href="/admin-next/assets/vendor-BDiMbLwQ.js">
|
<link rel="modulepreload" crossorigin href="/admin-next/assets/vendor-BDiMbLwQ.js">
|
||||||
<link rel="modulepreload" crossorigin href="/admin-next/assets/element-plus-B8Fs_0jW.js">
|
<link rel="modulepreload" crossorigin href="/admin-next/assets/element-plus-B8Fs_0jW.js">
|
||||||
|
|||||||
@@ -91,30 +91,30 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 辅助函数:获取系统时区某一天的起止UTC时间
|
// 辅助函数:获取系统时区某一天的起止UTC时间
|
||||||
// 输入:系统时区的日期(使用getDateInSystemTimezone转换后的)
|
// 输入:一个日期(以用户本地时间表示)
|
||||||
// 输出:对应的UTC时间
|
// 输出:该日期在系统时区的0点/23:59对应的UTC时间
|
||||||
function getSystemTimezoneDay(systemTzDate, startOfDay = true) {
|
function getSystemTimezoneDay(localDate, startOfDay = true) {
|
||||||
const offset = dashboardData.value.systemTimezone || 8
|
const offset = dashboardData.value.systemTimezone || 8
|
||||||
|
|
||||||
// 使用UTC方法获取系统时区日期的年月日
|
// 获取用户本地日期的年月日
|
||||||
const year = systemTzDate.getUTCFullYear()
|
const year = localDate.getFullYear()
|
||||||
const month = systemTzDate.getUTCMonth()
|
const month = localDate.getMonth()
|
||||||
const day = systemTzDate.getUTCDate()
|
const day = localDate.getDate()
|
||||||
|
|
||||||
// 创建一个新的Date对象
|
|
||||||
const result = new Date()
|
|
||||||
|
|
||||||
|
// 创建UTC时间,表示系统时区的该日期
|
||||||
if (startOfDay) {
|
if (startOfDay) {
|
||||||
// 设置为系统时区的0点(UTC时间)
|
// 系统时区YYYY-MM-DD 00:00:00 对应的UTC时间
|
||||||
result.setUTCFullYear(year, month, day)
|
const utcDate = new Date(Date.UTC(year, month, day, 0, 0, 0, 0))
|
||||||
result.setUTCHours(0 - offset, 0, 0, 0)
|
// 减去系统时区偏移得到UTC时间
|
||||||
|
utcDate.setUTCHours(utcDate.getUTCHours() - offset)
|
||||||
|
return utcDate
|
||||||
} else {
|
} else {
|
||||||
// 设置为系统时区的23:59:59.999(UTC时间)
|
// 系统时区YYYY-MM-DD 23:59:59.999 对应的UTC时间
|
||||||
result.setUTCFullYear(year, month, day)
|
const utcDate = new Date(Date.UTC(year, month, day, 23, 59, 59, 999))
|
||||||
result.setUTCHours(23 - offset, 59, 59, 999)
|
// 减去系统时区偏移得到UTC时间
|
||||||
|
utcDate.setUTCHours(utcDate.getUTCHours() - offset)
|
||||||
|
return utcDate
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 方法
|
// 方法
|
||||||
@@ -199,17 +199,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
|||||||
break
|
break
|
||||||
case 'yesterday':
|
case 'yesterday':
|
||||||
// 昨天:基于系统时区的昨天
|
// 昨天:基于系统时区的昨天
|
||||||
const systemNow = getDateInSystemTimezone(now)
|
const yesterday = new Date(now)
|
||||||
const yesterday = new Date(systemNow)
|
yesterday.setDate(yesterday.getDate() - 1)
|
||||||
yesterday.setUTCDate(yesterday.getUTCDate() - 1)
|
|
||||||
startTime = getSystemTimezoneDay(yesterday, true)
|
startTime = getSystemTimezoneDay(yesterday, true)
|
||||||
endTime = getSystemTimezoneDay(yesterday, false)
|
endTime = getSystemTimezoneDay(yesterday, false)
|
||||||
break
|
break
|
||||||
case 'dayBefore':
|
case 'dayBefore':
|
||||||
// 前天:基于系统时区的前天
|
// 前天:基于系统时区的前天
|
||||||
const systemNow2 = getDateInSystemTimezone(now)
|
const dayBefore = new Date(now)
|
||||||
const dayBefore = new Date(systemNow2)
|
dayBefore.setDate(dayBefore.getDate() - 2)
|
||||||
dayBefore.setUTCDate(dayBefore.getUTCDate() - 2)
|
|
||||||
startTime = getSystemTimezoneDay(dayBefore, true)
|
startTime = getSystemTimezoneDay(dayBefore, true)
|
||||||
endTime = getSystemTimezoneDay(dayBefore, false)
|
endTime = getSystemTimezoneDay(dayBefore, false)
|
||||||
break
|
break
|
||||||
@@ -279,17 +277,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
|||||||
break
|
break
|
||||||
case 'yesterday':
|
case 'yesterday':
|
||||||
// 昨天:基于系统时区的昨天
|
// 昨天:基于系统时区的昨天
|
||||||
const systemNow3 = getDateInSystemTimezone(now)
|
const yesterday = new Date(now)
|
||||||
const yesterday = new Date(systemNow3)
|
yesterday.setDate(yesterday.getDate() - 1)
|
||||||
yesterday.setUTCDate(yesterday.getUTCDate() - 1)
|
|
||||||
startTime = getSystemTimezoneDay(yesterday, true)
|
startTime = getSystemTimezoneDay(yesterday, true)
|
||||||
endTime = getSystemTimezoneDay(yesterday, false)
|
endTime = getSystemTimezoneDay(yesterday, false)
|
||||||
break
|
break
|
||||||
case 'dayBefore':
|
case 'dayBefore':
|
||||||
// 前天:基于系统时区的前天
|
// 前天:基于系统时区的前天
|
||||||
const systemNow4 = getDateInSystemTimezone(now)
|
const dayBefore = new Date(now)
|
||||||
const dayBefore = new Date(systemNow4)
|
dayBefore.setDate(dayBefore.getDate() - 2)
|
||||||
dayBefore.setUTCDate(dayBefore.getUTCDate() - 2)
|
|
||||||
startTime = getSystemTimezoneDay(dayBefore, true)
|
startTime = getSystemTimezoneDay(dayBefore, true)
|
||||||
endTime = getSystemTimezoneDay(dayBefore, false)
|
endTime = getSystemTimezoneDay(dayBefore, false)
|
||||||
break
|
break
|
||||||
@@ -351,17 +347,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
|||||||
break
|
break
|
||||||
case 'yesterday':
|
case 'yesterday':
|
||||||
// 昨天:基于系统时区的昨天
|
// 昨天:基于系统时区的昨天
|
||||||
const systemNow5 = getDateInSystemTimezone(now)
|
const yesterday2 = new Date(now)
|
||||||
const yesterday2 = new Date(systemNow5)
|
yesterday2.setDate(yesterday2.getDate() - 1)
|
||||||
yesterday2.setUTCDate(yesterday2.getUTCDate() - 1)
|
|
||||||
startDate = getSystemTimezoneDay(yesterday2, true)
|
startDate = getSystemTimezoneDay(yesterday2, true)
|
||||||
endDate = getSystemTimezoneDay(yesterday2, false)
|
endDate = getSystemTimezoneDay(yesterday2, false)
|
||||||
break
|
break
|
||||||
case 'dayBefore':
|
case 'dayBefore':
|
||||||
// 前天:基于系统时区的前天
|
// 前天:基于系统时区的前天
|
||||||
const systemNow6 = getDateInSystemTimezone(now)
|
const dayBefore2 = new Date(now)
|
||||||
const dayBefore2 = new Date(systemNow6)
|
dayBefore2.setDate(dayBefore2.getDate() - 2)
|
||||||
dayBefore2.setUTCDate(dayBefore2.getUTCDate() - 2)
|
|
||||||
startDate = getSystemTimezoneDay(dayBefore2, true)
|
startDate = getSystemTimezoneDay(dayBefore2, true)
|
||||||
endDate = getSystemTimezoneDay(dayBefore2, false)
|
endDate = getSystemTimezoneDay(dayBefore2, false)
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user