@koalarx/utils
Version:
Biblioteca com validadores, conversores e abstrações de algumas problemáticas
107 lines (106 loc) • 3.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KlTime = void 0;
const date_fns_1 = require("date-fns");
const KlDate_1 = require("./KlDate");
class KlTime extends Date {
constructor(value, minutes, seconds, miliseconds) {
if (value instanceof Date) {
super(value);
return;
}
const date = new Date();
super(date.getFullYear(), date.getMonth(), date.getDate(), value ?? 0, minutes ?? 0, seconds ?? 0, miliseconds ?? 0);
}
/**
* Formata o horário atual em uma string com base no padrão fornecido.
* @param mask Máscara de formatação (ex.: 'HH:mm:ss').
* @returns Uma string representando a data formatada.
*/
format(mask) {
return (0, date_fns_1.format)(this, mask || 'HH:mm:ss');
}
/**
* Altera o fuso horário (GMT) da data atual.
* @param GMT String representando o GMT (ex.: '+3', '-2').
* @returns Uma nova instância de `KlDate` com o GMT ajustado.
*/
changeTimeZone(timeZone) {
const date = new KlDate_1.KlDate(this.toLocaleString('en-US', { timeZone }));
const hours = +date.format('HH');
const minutes = +date.format('mm');
const seconds = +date.format('ss');
return new KlTime(hours, minutes, seconds);
}
/**
* Converte a data atual para o formato UTC.
* @returns Uma nova instância de `KlDate` no formato UTC.
*/
toUTC() {
const date = new KlDate_1.KlDate(this.toLocaleString('en-US', {
timeZone: 'UTC',
}));
const hours = +date.format('HH');
const minutes = +date.format('mm');
const seconds = +date.format('ss');
return new KlTime(hours, minutes, seconds);
}
/**
* Adiciona uma quantidade de tempo à data atual.
* @param qty Quantidade de tempo a ser adicionada.
* @param type Tipo de unidade de tempo (ex.: 'seconds', 'minutes', 'hours').
* @returns A própria instância de `KlDate` com a data ajustada.
*/
add(qty, type) {
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;
}
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', 'minutes', 'hours').
* @returns A própria instância de `KlDate` com a data ajustada.
*/
sub(qty, type) {
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;
}
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', 'minutes').
* @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));
}
}
}
exports.KlTime = KlTime;