UNPKG

nhb-toolbox

Version:

A versatile collection of smart, efficient, and reusable utility functions and classes for everyday development needs.

45 lines (44 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.timeZonePlugin = void 0; const constants_1 = require("../constants"); const guards_1 = require("../guards"); const utils_1 = require("../utils"); /** * Plugin to inject `timeZone` related methods */ const timeZonePlugin = (ChronosClass) => { ChronosClass.prototype.timeZone = function (zone) { let targetOffset; let stringOffset; if ((0, guards_1.isValidUTCOffSet)(zone)) { targetOffset = (0, utils_1.extractMinutesFromUTC)(zone); stringOffset = zone; } else { targetOffset = constants_1.TIME_ZONES?.[zone] ?? constants_1.TIME_ZONES['UTC']; stringOffset = (0, utils_1.formatUTCOffset)(targetOffset); } const previousOffset = this.getTimeZoneOffsetMinutes(); const relativeOffset = targetOffset - previousOffset; const adjustedTime = new Date(ChronosClass[constants_1.INTERNALS].internalDate(this).getTime() + relativeOffset * 60 * 1000); const instance = new ChronosClass(adjustedTime); return ChronosClass[constants_1.INTERNALS].withOrigin(instance, 'timeZone', stringOffset); }; ChronosClass.prototype.getTimeZoneNameShort = function (utc) { const mins = utc ? (0, utils_1.extractMinutesFromUTC)(utc) : this.getTimeZoneOffsetMinutes(); const UTC = (0, utils_1.formatUTCOffset)(mins); const timeZone = constants_1.TIME_ZONE_LABELS?.[UTC]; let result = timeZone ?.split(' ') ?.filter(Boolean) ?.map((part) => part?.charAt(0)) ?.join('') ?.replace(/\W/g, ''); if (!result) { const zones = Object.entries(constants_1.TIME_ZONES); result = zones.find((zone) => zone?.[1] === mins)?.[0]; } return result ?? (0, utils_1.formatUTCOffset)(mins); }; }; exports.timeZonePlugin = timeZonePlugin;