@igleite/tsutils
Version:
Uma coleção de utilitários em TypeScript para facilitar o desenvolvimento no dia a dia.
190 lines (189 loc) • 7.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DateUtils = void 0;
/**
* Classe utilitária para manipulação de datas.
*/
class DateUtils {
/**
* Converte uma data UTC para a data local do usuário.
*
* @param {Date} date - A data UTC a ser convertida.
* @returns {Date} - A data convertida para o horário local.
*
* @example
* const utcDate = new Date('2023-09-21T10:00:00Z');
* const localDate = DateUtils.convertUTCDateToLocalDate(utcDate);
* console.log(localDate); // Exibe a data convertida para o horário local
*/
static convertUTCDateToLocalDate(date) {
try {
const newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
const offset = date.getTimezoneOffset() / 60;
const hours = date.getHours();
newDate.setHours(hours - offset);
return newDate;
}
catch (error) {
console.error('Error in convertUTCDateToLocalDate:', error);
return new Date();
}
}
/**
* Converte uma string representando uma data em um objeto Date.
*
* @param {string} date - A string a ser convertida para uma data.
* @returns {Date} - O objeto Date correspondente à string fornecida.
*
* @example
* const dateString = "2023-09-21";
* const dateObject = DateUtils.convertStrinToDate(dateString);
* console.log(dateObject); // Exibe a data como um objeto Date
*/
static convertStrinToDate(date) {
try {
return new Date(date);
}
catch (error) {
console.error('Error in convertStrinToDate:', error);
return new Date();
}
}
/**
* Formata uma data para ser utilizada em um componente de seletor de data.
*
* @param {Date} myDate - A data a ser formatada.
* @returns {Object} - Um objeto contendo a data formatada.
*
* @example
* const myDate = new Date('2023-09-21');
* const pickerDate = DateUtils.setMyDatePickerDate(myDate);
* console.log(pickerDate); // { date: { year: 2023, month: 9, day: 21 } }
*/
static setMyDatePickerDate(myDate) {
try {
const pickerDate = new Date(myDate);
return { date: { year: pickerDate.getFullYear(), month: pickerDate.getMonth() + 1, day: pickerDate.getDate() } };
}
catch (error) {
console.error('Error in setMyDatePickerDate:', error);
return { date: { year: 0, month: 0, day: 0 } };
}
}
/**
* Converte uma data formatada de um seletor de data para um objeto Date.
*
* @param {Object} myDate - O objeto contendo a data formatada.
* @returns {Date} - O objeto Date correspondente à data formatada.
*
* @example
* const pickerDate = { date: { year: 2023, month: 9, day: 21 } };
* const dateObject = DateUtils.getMyDatePickerDate(pickerDate);
* console.log(dateObject); // Exibe a data como um objeto Date
*/
static getMyDatePickerDate(myDate) {
try {
return new Date(myDate.date.year, myDate.date.month - 1, myDate.date.day);
}
catch (error) {
console.error('Error in getMyDatePickerDate:', error);
return new Date();
}
}
/**
* Define o final do dia para uma data fornecida, configurando horas, minutos, segundos e milissegundos.
*
* @param {Date} myDate - A data para a qual o final do dia deve ser definido.
* @returns {Date} - A data ajustada para o final do dia.
*
* @example
* const myDate = new Date('2023-09-21');
* const endOfDay = DateUtils.toEndOfDay(myDate);
* console.log(endOfDay); // Exibe a data com hora ajustada para 23:59:59.999
*/
static toEndOfDay(myDate) {
try {
const endOfDay = new Date(myDate);
return new Date(endOfDay.getFullYear(), endOfDay.getMonth(), endOfDay.getDate() + 1, 23, 59, 59, 999);
}
catch (error) {
console.error('Error in toEndOfDay:', error);
return new Date();
}
}
/**
* Verifica se o objeto fornecido é uma data válida.
*
* @param {any} obj - O objeto a ser verificado.
* @returns {boolean} - Verdadeiro se o objeto for uma data válida; caso contrário, falso.
*/
static isDate(obj) {
try {
const date = new Date(obj);
return !isNaN(date.getTime());
}
catch (error) {
console.error('Error in isDate:', error);
return false;
}
}
/**
* Analisa um objeto e o converte em uma string de data no formato "YYYY-MM-DD".
*
* @param {any} obj - O objeto a ser analisado.
* @returns {string} - A string de data formatada.
*/
static parseDate(obj) {
try {
// Moment.js
if (obj.dd instanceof Date) {
const d = obj.dd;
const month = +d.getMonth() + 1;
const day = +d.getDate();
return `${d.getFullYear()}-${this._formatDayOrMonth(month)}-${this._formatDayOrMonth(day)}`;
}
// NgbDateStruct
if (typeof obj === 'object' && obj.year != null && obj.month != null && obj.day != null) {
const month = +obj.month;
const day = +obj.day;
return `${obj.year}-${this._formatDayOrMonth(month)}-${this._formatDayOrMonth(day)}`;
}
}
catch (error) {
console.error('Error in parseDate:', error);
}
return obj;
}
/**
* Formata o dia ou mês para adicionar um zero à esquerda se for menor que 10.
*
* @param {number} month - O número a ser formatado.
* @returns {string | number} - O número formatado com ou sem zero à esquerda.
*/
static _formatDayOrMonth(month) {
return month < 10 ? `0${month}` : month;
}
/**
* Formata uma data para o padrão "yyyy-MM".
*
* @param {Date} date - A data a ser formatada.
* @returns {string} - A data formatada no padrão "yyyy-MM".
*
* @example
* const date = new Date('2023-09-21');
* const formatted = DateUtils.getYearMonthString(date);
* console.log(formatted); // "2023-09"
*/
static getYearMonthString(date) {
try {
const year = date.getFullYear();
const month = date.getMonth() + 1; // getMonth() retorna 0-11
return `${year}-${this._formatDayOrMonth(month)}`;
}
catch (error) {
console.error('Error in getYearMonthString:', error);
return '';
}
}
}
exports.DateUtils = DateUtils;