UNPKG

@koalarx/utils

Version:

Biblioteca com validadores, conversores e abstrações de algumas problemáticas

124 lines (123 loc) 4.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KlDate = void 0; const date_fns_1 = require("date-fns"); class KlDate extends Date { /** * Formata a data atual em uma string com base no padrão fornecido. * @param mask Máscara de formatação (ex.: 'dd/MM/yyyy HH:mm:ss'). * @returns Uma string representando a data formatada. */ format(mask) { return (0, date_fns_1.format)(this, mask || 'dd/MM/yyyy HH:mm:ss'); } /** * Altera o fuso horário (GMT) da data atual. * @param timeZone String representando o GMT (ex.: '+3', '-2'). * @returns Uma nova instância de `KlDate` com o GMT ajustado. */ changeTimeZone(timeZone) { return new KlDate(this.toLocaleString('en-US', { timeZone })); } /** * Converte a data atual para o formato UTC. * @returns Uma nova instância de `KlDate` no formato UTC. */ toUTC() { return new KlDate(this.toLocaleString('en-US', { timeZone: 'UTC', })); } /** * Adiciona uma quantidade de tempo à data atual. * @param qty Quantidade de tempo a ser adicionada. * @param type Tipo de unidade de tempo (ex.: 'seconds', 'days', 'months'). * @param options Opções para ignorar feriados ou dias específicos. * @returns A própria instância de `KlDate` com a data ajustada. */ add(qty, type, options) { switch (type) { case 'seconds': this.setSeconds(this.getSeconds() + qty); break; case 'minutes': this.setMinutes(this.getMinutes() + qty); break; case 'hours': this.setHours(this.getHours() + qty); break; case 'days': this.setDate(this.getDate() + qty); break; case 'months': this.setMonth(this.getMonth() + qty); break; case 'years': this.setFullYear(this.getFullYear() + qty); break; } // Ignora feriados ou dias específicos, se configurado. if (options?.skipDays && options.skipDays.includes(this.getDay())) { this.add(1, 'days', options); } return this; } /** * Subtrai uma quantidade de tempo da data atual. * @param qty Quantidade de tempo a ser subtraída. * @param type Tipo de unidade de tempo (ex.: 'seconds', 'days', 'months'). * @param options Opções para ignorar feriados ou dias específicos. * @returns A própria instância de `KlDate` com a data ajustada. */ sub(qty, type, options) { switch (type) { case 'seconds': this.setSeconds(this.getSeconds() - qty); break; case 'minutes': this.setMinutes(this.getMinutes() - qty); break; case 'hours': this.setHours(this.getHours() - qty); break; case 'days': this.setDate(this.getDate() - qty); break; case 'months': this.setMonth(this.getMonth() - qty); break; case 'years': this.setFullYear(this.getFullYear() - qty); break; } // Ignora feriados ou dias específicos, se configurado. if (options?.skipDays && options.skipDays.includes(this.getDay())) { return this.sub(1, 'days', options); } return this; } /** * Calcula a diferença entre a data atual e outra data fornecida. * @param date A data para calcular a diferença. * @param type Tipo de unidade de tempo para o cálculo (ex.: 'seconds', 'days'). * @returns A diferença entre as datas na unidade especificada. */ diff(date, type) { const diffInMs = Math.abs(this.getTime() - date.getTime()); switch (type) { case 'seconds': return Math.floor(diffInMs / 1000); case 'minutes': return Math.floor(diffInMs / (1000 * 60)); case 'hours': return Math.floor(diffInMs / (1000 * 60 * 60)); case 'days': return Math.floor(diffInMs / (1000 * 60 * 60 * 24)); case 'months': return Math.floor(diffInMs / (1000 * 60 * 60 * 24 * 30)); case 'years': return Math.floor(diffInMs / (1000 * 60 * 60 * 24 * 365)); } } } exports.KlDate = KlDate;