@parsify/timezone
Version:
Parsify plugin for time zone conversion
15 lines (14 loc) • 1.23 kB
JavaScript
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}`;