mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 21:17:30 +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="dns-prefetch" href="https://cdn.jsdelivr.net">
|
||||
<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/vendor-BDiMbLwQ.js">
|
||||
<link rel="modulepreload" crossorigin href="/admin-next/assets/element-plus-B8Fs_0jW.js">
|
||||
|
||||
@@ -91,30 +91,30 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
||||
}
|
||||
|
||||
// 辅助函数:获取系统时区某一天的起止UTC时间
|
||||
// 输入:系统时区的日期(使用getDateInSystemTimezone转换后的)
|
||||
// 输出:对应的UTC时间
|
||||
function getSystemTimezoneDay(systemTzDate, startOfDay = true) {
|
||||
// 输入:一个日期(以用户本地时间表示)
|
||||
// 输出:该日期在系统时区的0点/23:59对应的UTC时间
|
||||
function getSystemTimezoneDay(localDate, startOfDay = true) {
|
||||
const offset = dashboardData.value.systemTimezone || 8
|
||||
|
||||
// 使用UTC方法获取系统时区日期的年月日
|
||||
const year = systemTzDate.getUTCFullYear()
|
||||
const month = systemTzDate.getUTCMonth()
|
||||
const day = systemTzDate.getUTCDate()
|
||||
|
||||
// 创建一个新的Date对象
|
||||
const result = new Date()
|
||||
// 获取用户本地日期的年月日
|
||||
const year = localDate.getFullYear()
|
||||
const month = localDate.getMonth()
|
||||
const day = localDate.getDate()
|
||||
|
||||
// 创建UTC时间,表示系统时区的该日期
|
||||
if (startOfDay) {
|
||||
// 设置为系统时区的0点(UTC时间)
|
||||
result.setUTCFullYear(year, month, day)
|
||||
result.setUTCHours(0 - offset, 0, 0, 0)
|
||||
// 系统时区YYYY-MM-DD 00:00:00 对应的UTC时间
|
||||
const utcDate = new Date(Date.UTC(year, month, day, 0, 0, 0, 0))
|
||||
// 减去系统时区偏移得到UTC时间
|
||||
utcDate.setUTCHours(utcDate.getUTCHours() - offset)
|
||||
return utcDate
|
||||
} else {
|
||||
// 设置为系统时区的23:59:59.999(UTC时间)
|
||||
result.setUTCFullYear(year, month, day)
|
||||
result.setUTCHours(23 - offset, 59, 59, 999)
|
||||
// 系统时区YYYY-MM-DD 23:59:59.999 对应的UTC时间
|
||||
const utcDate = new Date(Date.UTC(year, month, day, 23, 59, 59, 999))
|
||||
// 减去系统时区偏移得到UTC时间
|
||||
utcDate.setUTCHours(utcDate.getUTCHours() - offset)
|
||||
return utcDate
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// 方法
|
||||
@@ -199,17 +199,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
||||
break
|
||||
case 'yesterday':
|
||||
// 昨天:基于系统时区的昨天
|
||||
const systemNow = getDateInSystemTimezone(now)
|
||||
const yesterday = new Date(systemNow)
|
||||
yesterday.setUTCDate(yesterday.getUTCDate() - 1)
|
||||
const yesterday = new Date(now)
|
||||
yesterday.setDate(yesterday.getDate() - 1)
|
||||
startTime = getSystemTimezoneDay(yesterday, true)
|
||||
endTime = getSystemTimezoneDay(yesterday, false)
|
||||
break
|
||||
case 'dayBefore':
|
||||
// 前天:基于系统时区的前天
|
||||
const systemNow2 = getDateInSystemTimezone(now)
|
||||
const dayBefore = new Date(systemNow2)
|
||||
dayBefore.setUTCDate(dayBefore.getUTCDate() - 2)
|
||||
const dayBefore = new Date(now)
|
||||
dayBefore.setDate(dayBefore.getDate() - 2)
|
||||
startTime = getSystemTimezoneDay(dayBefore, true)
|
||||
endTime = getSystemTimezoneDay(dayBefore, false)
|
||||
break
|
||||
@@ -279,17 +277,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
||||
break
|
||||
case 'yesterday':
|
||||
// 昨天:基于系统时区的昨天
|
||||
const systemNow3 = getDateInSystemTimezone(now)
|
||||
const yesterday = new Date(systemNow3)
|
||||
yesterday.setUTCDate(yesterday.getUTCDate() - 1)
|
||||
const yesterday = new Date(now)
|
||||
yesterday.setDate(yesterday.getDate() - 1)
|
||||
startTime = getSystemTimezoneDay(yesterday, true)
|
||||
endTime = getSystemTimezoneDay(yesterday, false)
|
||||
break
|
||||
case 'dayBefore':
|
||||
// 前天:基于系统时区的前天
|
||||
const systemNow4 = getDateInSystemTimezone(now)
|
||||
const dayBefore = new Date(systemNow4)
|
||||
dayBefore.setUTCDate(dayBefore.getUTCDate() - 2)
|
||||
const dayBefore = new Date(now)
|
||||
dayBefore.setDate(dayBefore.getDate() - 2)
|
||||
startTime = getSystemTimezoneDay(dayBefore, true)
|
||||
endTime = getSystemTimezoneDay(dayBefore, false)
|
||||
break
|
||||
@@ -351,17 +347,15 @@ export const useDashboardStore = defineStore('dashboard', () => {
|
||||
break
|
||||
case 'yesterday':
|
||||
// 昨天:基于系统时区的昨天
|
||||
const systemNow5 = getDateInSystemTimezone(now)
|
||||
const yesterday2 = new Date(systemNow5)
|
||||
yesterday2.setUTCDate(yesterday2.getUTCDate() - 1)
|
||||
const yesterday2 = new Date(now)
|
||||
yesterday2.setDate(yesterday2.getDate() - 1)
|
||||
startDate = getSystemTimezoneDay(yesterday2, true)
|
||||
endDate = getSystemTimezoneDay(yesterday2, false)
|
||||
break
|
||||
case 'dayBefore':
|
||||
// 前天:基于系统时区的前天
|
||||
const systemNow6 = getDateInSystemTimezone(now)
|
||||
const dayBefore2 = new Date(systemNow6)
|
||||
dayBefore2.setUTCDate(dayBefore2.getUTCDate() - 2)
|
||||
const dayBefore2 = new Date(now)
|
||||
dayBefore2.setDate(dayBefore2.getDate() - 2)
|
||||
startDate = getSystemTimezoneDay(dayBefore2, true)
|
||||
endDate = getSystemTimezoneDay(dayBefore2, false)
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user