UNPKG

@parsify/timezone

Version:

Parsify plugin for time zone conversion

15 lines (14 loc) 1.23 kB
import { addSeconds, subSeconds } from 'date-fns'; import * as date from 'date-fns-tz'; const { utcToZonedTime } = date; export const byLocation = async ({ key, location, prefersLong, locale, fetcher, }) => { const response = await fetcher(`https://api.opencagedata.com/geocode/v1/json?q=${location}&key=${key}&no_record=1`); const tzOffset = response.results[0]?.annotations?.timezone?.offset_sec; const localOffset = new Date().getTimezoneOffset() * 60; const offset = tzOffset + localOffset; if (offset > 0) { return `${new Date(addSeconds(new Date(), offset)).toLocaleTimeString(locale, { hour: 'numeric', minute: 'numeric' })} ${prefersLong ? response.results[0]?.annotations?.timezone.name : response.results[0]?.annotations?.timezone.short_name}`; } return `${new Date(subSeconds(new Date(), Math.abs(offset))).toLocaleTimeString(locale, { hour: 'numeric', minute: 'numeric' })} ${prefersLong ? response.results[0]?.annotations?.timezone.name : response.results[0]?.annotations?.timezone.short_name}`; }; export const byZone = async (zone, locale) => `${new Date(utcToZonedTime(new Date(Date.now()), zone)).toLocaleTimeString(locale, { hour: 'numeric', minute: 'numeric' })} ${zone}`;