diff --git a/packages/@internationalized/date/src/index.ts b/packages/@internationalized/date/src/index.ts index d55e305e8f9..22e703f66f5 100644 --- a/packages/@internationalized/date/src/index.ts +++ b/packages/@internationalized/date/src/index.ts @@ -63,6 +63,8 @@ export { today, getHoursInDay, getLocalTimeZone, + setLocalTimeZone, + resetLocalTimeZone, startOfMonth, startOfWeek, startOfYear, diff --git a/packages/@internationalized/date/src/queries.ts b/packages/@internationalized/date/src/queries.ts index 1d32b74d7a9..fc95a2f7634 100644 --- a/packages/@internationalized/date/src/queries.ts +++ b/packages/@internationalized/date/src/queries.ts @@ -133,7 +133,6 @@ let localTimeZone: string | null = null; /** Returns the time zone identifier for the current user. */ export function getLocalTimeZone(): string { - // TODO: invalidate this somehow? if (localTimeZone == null) { localTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone; } @@ -141,6 +140,16 @@ export function getLocalTimeZone(): string { return localTimeZone!; } +/** Sets the time zone identifier for the current user. */ +export function setLocalTimeZone(timeZone: string): void { + localTimeZone = timeZone; +} + +/** Resets the time zone identifier for the current user. */ +export function resetLocalTimeZone(): void { + localTimeZone = null; +} + /** Returns the first date of the month for the given date. */ export function startOfMonth(date: ZonedDateTime): ZonedDateTime; export function startOfMonth(date: CalendarDateTime): CalendarDateTime; diff --git a/packages/@internationalized/date/tests/queries.test.js b/packages/@internationalized/date/tests/queries.test.js index 87650e38af4..5d6c75c0290 100644 --- a/packages/@internationalized/date/tests/queries.test.js +++ b/packages/@internationalized/date/tests/queries.test.js @@ -17,6 +17,7 @@ import { endOfYear, EthiopicCalendar, getDayOfWeek, + getLocalTimeZone, getMinimumDayInMonth, getMinimumMonthInYear, getWeeksInMonth, @@ -31,6 +32,8 @@ import { maxDate, minDate, PersianCalendar, + resetLocalTimeZone, + setLocalTimeZone, startOfMonth, startOfWeek, startOfYear, @@ -343,4 +346,15 @@ describe('queries', function () { expect(b.compare(a)).toBeGreaterThan(0); }); }); + + describe('getLocalTimeZone', function () { + it('gets local time zone', function () { + const systemTimeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone; + expect(getLocalTimeZone()).toBe(systemTimeZone); + setLocalTimeZone('America/Denver'); + expect(getLocalTimeZone()).toBe('America/Denver'); + resetLocalTimeZone(); + expect(getLocalTimeZone()).toBe(systemTimeZone); + }); + }); });