diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index c47bef3106..2fa7d134b5 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -23,3 +23,4 @@ export * from './window.service'; export * from './internet-connection-service'; export * from './local-storage-listener.service'; export * from './title-strategy.service'; +export * from './timezone.service'; diff --git a/npm/ng-packs/packages/core/src/lib/services/timezone.service.ts b/npm/ng-packs/packages/core/src/lib/services/timezone.service.ts new file mode 100644 index 0000000000..5862b5be04 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/services/timezone.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class TimezoneService { + private readonly cookieKey = '__timezone'; + + getBrowserTimezone(): string { + return Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + getTimezone(): string { + const fromCookie = this.getCookie(this.cookieKey); + return fromCookie || this.getBrowserTimezone(); + } + + setTimezone(timezone: string): void { + document.cookie = `${this.cookieKey}=${timezone}; path=/`; + } + + convertUtcToLocal(date: string | Date): Date { + return new Date(date + 'Z'); + } + + convertLocalToUtc(date: Date): string { + return date.toISOString(); + } + + private getCookie(name: string): string | null { + const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); + return match ? decodeURIComponent(match[2]) : null; + } +}