From b7e650461754f40f1a0282f30f32a953cb41f8af Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Wed, 23 Sep 2026 14:42:40 +0800 Subject: [PATCH] fix(quota): align reset countdown with Management Center --- src/services/quotaTime.ts | 6 +++--- tests/quotaTime.test.ts | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/services/quotaTime.ts b/src/services/quotaTime.ts index 5c04222..bd15259 100644 --- a/src/services/quotaTime.ts +++ b/src/services/quotaTime.ts @@ -44,10 +44,10 @@ export const formatQuotaReset = ( }).format(resetAtMs); const delta = resetAtMs - nowMs; if (delta <= 0) return `${absolute} · ${translate(locale, 'quota.resetPassed')}`; - const minutes = Math.max(1, Math.ceil(delta / 60000)); + const minutes = Math.max(1, Math.floor(delta / 60000)); const relative = new Intl.RelativeTimeFormat(locale, { numeric: 'always' }); - const label = minutes >= 1440 ? relative.format(Math.ceil(minutes / 1440), 'day') - : minutes >= 60 ? relative.format(Math.ceil(minutes / 60), 'hour') + const label = minutes >= 1440 ? relative.format(Math.floor(minutes / 1440), 'day') + : minutes >= 60 ? relative.format(Math.floor(minutes / 60), 'hour') : relative.format(minutes, 'minute'); return `${absolute} · ${label}`; }; diff --git a/tests/quotaTime.test.ts b/tests/quotaTime.test.ts index cf3aac3..4aff4bd 100644 --- a/tests/quotaTime.test.ts +++ b/tests/quotaTime.test.ts @@ -28,4 +28,16 @@ describe('quota reset instants', () => { expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs)).toContain('重置时间已到,请刷新确认'); expect(formatQuotaReset(undefined, 'legacy', 'en', resetMs)).toBe('legacy'); }); + + it('与管理中心一致,按完整天、小时和分钟向下计算剩余时间', () => { + const absolute = new Intl.DateTimeFormat('zh-CN', { + month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false, + }).format(resetMs); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - 36 * 60 * 60 * 1000)).toBe(`${absolute} · 1天后`); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - 24 * 60 * 60 * 1000)).toBe(`${absolute} · 1天后`); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - (24 * 60 * 60 * 1000 - 1))).toBe(`${absolute} · 23小时后`); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - 60 * 60 * 1000)).toBe(`${absolute} · 1小时后`); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - (60 * 60 * 1000 - 1))).toBe(`${absolute} · 59分钟后`); + expect(formatQuotaReset(resetMs, undefined, 'zh-CN', resetMs - 1000)).toBe(`${absolute} · 1分钟后`); + }); });