mirror of
https://github.com/umami-software/umami.git
synced 2026-02-04 12:47:13 +01:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { setItem } from '@/lib/storage';
|
|
import { TIMEZONE_CONFIG } from '@/lib/constants';
|
|
import { formatInTimeZone, zonedTimeToUtc, utcToZonedTime } from 'date-fns-tz';
|
|
import { useApp, setTimezone } from '@/store/app';
|
|
import { useLocale } from './useLocale';
|
|
|
|
const selector = (state: { timezone: string }) => state.timezone;
|
|
|
|
export function useTimezone() {
|
|
const timezone = useApp(selector);
|
|
const { dateLocale } = useLocale();
|
|
|
|
const saveTimezone = (value: string) => {
|
|
setItem(TIMEZONE_CONFIG, value);
|
|
setTimezone(value);
|
|
};
|
|
|
|
const formatTimezoneDate = (date: string, pattern: string) => {
|
|
return formatInTimeZone(
|
|
/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{3})?Z$/.test(date)
|
|
? date
|
|
: date.split(' ').join('T') + 'Z',
|
|
timezone,
|
|
pattern,
|
|
{ locale: dateLocale },
|
|
);
|
|
};
|
|
|
|
const toUtc = (date: Date | string | number) => {
|
|
return zonedTimeToUtc(date, timezone);
|
|
};
|
|
|
|
const fromUtc = (date: Date | string | number) => {
|
|
return utcToZonedTime(date, timezone);
|
|
};
|
|
|
|
return { timezone, saveTimezone, formatTimezoneDate, toUtc, fromUtc };
|
|
}
|