prefer client timezone for site announcements

This commit is contained in:
cita
2026-03-20 14:06:11 +08:00
parent 1af1fe244a
commit f880e3a25f
4 changed files with 28 additions and 2 deletions
@@ -5,6 +5,7 @@ import {
SiteAnnouncementContent,
formatSiteAnnouncementSeenAt,
readClientTimeZone,
resolveSiteAnnouncementTimeZone,
} from './siteAnnouncementPresentation.js';
type BrowserGlobals = {
@@ -85,6 +86,11 @@ describe('siteAnnouncementPresentation helpers', () => {
expect(formatSiteAnnouncementSeenAt('2026-03-20 04:23:27', 'Asia/Shanghai')).toBe('2026/03/20 12:23:27');
});
it('prefers client timezone over server timezone', () => {
expect(resolveSiteAnnouncementTimeZone('Asia/Shanghai', 'UTC')).toBe('Asia/Shanghai');
expect(resolveSiteAnnouncementTimeZone('', 'UTC')).toBe('UTC');
});
it('reads the browser timezone when available', () => {
expect(readClientTimeZone()).toBeTruthy();
});
@@ -340,6 +340,17 @@ export function readClientTimeZone(): string | undefined {
}
}
export function resolveSiteAnnouncementTimeZone(
clientTimeZone?: string | null,
serverTimeZone?: string | null,
): string | undefined {
const client = String(clientTimeZone || '').trim();
if (client) return client;
const server = String(serverTimeZone || '').trim();
return server || undefined;
}
export function formatSiteAnnouncementSeenAt(
value: string | null | undefined,
timeZone = readClientTimeZone(),