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
JavaScript
;
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;