UNPKG

laima

Version:

Laima is a npm package that enables you to work with dates in a simple and intuitive way. This package includes functions for manipulating, formatting, comparing, and displaying dates in different formats. It is the newest alternative to Moment, offering

278 lines (276 loc) 11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class laima { /** * Retorna horario do Epoch * @returns {number} Epoch time */ getEpochTime() { return new Date().getTime(); } /** * Converte um valor de epoch em um objeto Date. * * @param {number} epochTime - O valor de epoch a ser convertido. * @returns {Date} Um objeto Date correspondente ao valor de epoch fornecido. */ epochToDate(epochTime) { return new Date(epochTime); } /** * Converte um objeto Date em um valor de epoch. * * @param {Date} date - O objeto Date a ser convertido. * @returns {number} O valor de epoch correspondente ao objeto Date fornecido. */ dateToEpoch(date) { return date.getTime(); } /** * Calcula a diferença de tempo em dias entre dois valores de epoch. * * @param {number} epoch1 - O primeiro valor de epoch. * @param {number} epoch2 - O segundo valor de epoch. * @returns {number} A diferença de tempo em dias entre os dois valores de epoch. */ getDaysDifferenceBetweenEpochs(epoch1, epoch2) { const millisecondsPerDay = 24 * 60 * 60 * 1000; const daysDifference = Math.abs(epoch1 - epoch2) / millisecondsPerDay; return Math.round(daysDifference); } /** * Calcula a diferença de tempo em dias entre duas datas. * * @param {Date} date1 - A primeira data. * @param {Date} date2 - A segunda data. * @returns {number} A diferença de tempo em dias entre as duas datas. */ getDaysDifference(date1, date2) { const epoch1 = date1.getTime(); const epoch2 = date2.getTime(); return this.getDaysDifferenceBetweenEpochs(epoch1, epoch2); } /** * Calcula a diferença de tempo em milissegundos entre duas datas. * * @param {Date} date1 - A primeira data. * @param {Date} date2 - A segunda data. * @returns {number} A diferença de tempo em milissegundos entre as duas datas. */ getTimeDifference(date1, date2) { return Math.abs(date1.getTime() - date2.getTime()); } /** * Formata uma data no padrão de banco de dados (YYYY-MM-DD). * * @param {Date} date - A data a ser formatada. * @returns {string} A data formatada no padrão de banco de dados (YYYY-MM-DD). */ formatDateForDB(date) { const year = date.getFullYear(); const monthNumber = date.getMonth() + 1; const dayNumber = date.getDate(); const month = monthNumber < 10 ? `0${monthNumber}` : monthNumber.toString(); const day = dayNumber < 10 ? `0${dayNumber}` : dayNumber.toString(); return `${year}-${month}-${day}`; } /** * Converte uma data no formato dd-mm-YYYY para um objeto Date. * * @param {string} dateString - A data em formato de string (dd-mm-YYYY) a ser convertida. * @returns {Date} Um objeto Date correspondente à data fornecida em formato de string. */ parseDateFromDB(dateString) { console.log('ATUALIZADA'); const [day, month, year] = dateString.split("-"); return new Date(Number(year), Number(month) - 1, Number(day)); } /** * Adiciona um número específico de dias a uma data. * * @param {Date} date - A data base à qual os dias serão adicionados ou subtraídos. * @param {number} days - O número de dias a serem adicionados (positivo) ou subtraídos (negativo) à data base. * @returns {Date} Um novo objeto Date com os dias adicionados ou subtraídos. */ addDays(date, days) { const newDate = new Date(date); newDate.setDate(newDate.getDate() + days); return newDate; } /** * Subtrai um número específico de dias a uma data. * * @param {Date} date - A data base à qual os dias serão adicionados ou subtraídos. * @param {number} days - O número de dias a serem adicionados (positivo) ou subtraídos (negativo) à data base. * @returns {Date} Um novo objeto Date com os dias adicionados ou subtraídos. */ subDays(date, days) { const newDate = new Date(date); newDate.setDate(newDate.getDate() - days); return newDate; } /** * Retorna a maior (mais recente) de duas datas. * * @param {Date} date1 - A primeira data. * @param {Date} date2 - A segunda data. * @returns {Date} A maior (mais recente) das duas datas fornecidas. */ getMaxDate(date1, date2) { return date1 > date2 ? date1 : date2; } /** * Retorna a menor (mais antiga) de duas datas. * * @param {Date} date1 - A primeira data. * @param {Date} date2 - A segunda data. * @returns {Date} A menor (mais antiga) das duas datas fornecidas. */ getMinDate(date1, date2) { return date1 < date2 ? date1 : date2; } /** Função que retorna a data e hora atuais em um formato específico. @param formatString Formato desejado da data e hora. Caso não seja fornecido, o formato padrão é 'YYYY-MM-DD HH:mm:ss'. Possíveis valores para formatação: YYYY - ano completo MM - mês com dois dígitos (ex: 02) M - mês sem zeros à esquerda (ex: 2) DD - dia com dois dígitos (ex: 07) D - dia sem zeros à esquerda (ex: 7) HH - hora com dois dígitos no formato 24h (ex: 19) H - hora sem zeros à esquerda no formato 24h (ex: 9) hh - hora com dois dígitos no formato 12h (ex: 07) h - hora sem zeros à esquerda no formato 12h (ex: 7) mm - minutos com dois dígitos (ex: 03) m - minutos sem zeros à esquerda (ex: 3) ss - segundos com dois dígitos (ex: 09) s - segundos sem zeros à esquerda (ex: 9) a - 'am' ou 'pm' (apenas quando combinado com 'h' ou 'hh') @returns Data e hora atuais no formato especificado. */ format(formatString) { const date = new Date(); const year = date.getFullYear(); const monthNumber = date.getMonth() + 1; const dayNumber = date.getDate(); const hoursNumber = date.getHours(); const minutesNumber = date.getMinutes(); const secondsNumber = date.getSeconds(); const month = monthNumber < 10 ? `0${monthNumber}` : monthNumber.toString(); const day = dayNumber < 10 ? `0${dayNumber}` : dayNumber.toString(); const hours = hoursNumber < 10 ? `0${hoursNumber}` : hoursNumber.toString(); const minutes = minutesNumber < 10 ? `0${minutesNumber}` : minutesNumber.toString(); const seconds = secondsNumber < 10 ? `0${secondsNumber}` : secondsNumber.toString(); const replacements = { 'YYYY': year.toString(), 'YY': year.toString().substr(-2), 'MM': month, 'M': monthNumber.toString(), 'DD': day, 'D': dayNumber.toString(), 'HH': hours, 'H': hoursNumber.toString(), 'hh': (hoursNumber % 12 || 12).toString().padStart(2, '0'), 'h': (hoursNumber % 12 || 12).toString(), 'mm': minutes, 'm': minutesNumber.toString(), 'ss': seconds, 's': secondsNumber.toString(), }; let formattedDate = formatString || 'YYYY-MM-DD HH:mm:ss'; for (const replacement in replacements) { formattedDate = formattedDate.replace(replacement, replacements[replacement]); } return formattedDate; } /** * Adiciona um número específico de meses a uma data. * * @param {Date} date - A data base à qual os meses serão adicionados. * @param {number} months - O número de meses a serem adicionados à data base. * @returns {Date} Um novo objeto Date com os meses adicionados. */ addMonths(date, months) { const year = date.getFullYear(); const month = date.getMonth(); const day = date.getDate(); console.log(`year: ${year}, month: ${month}, day: ${day}`); const newDate = new Date(year, month + months, day); console.log(`newDate: ${newDate.toString()}, newDate month: ${newDate.getMonth()}`); return newDate; } /** * Subtrai um número específico de meses de uma data. * * @param {Date} date - A data base da qual os meses serão subtraídos. * @param {number} months - O número de meses a serem subtraídos da data base. * @returns {Date} Um novo objeto Date com os meses subtraídos. */ subMonths(date, months) { const newDate = new Date(date); newDate.setMonth(newDate.getMonth() - months); return newDate; } /** * Formata um objeto Date para uma string no formato local. * * @param {Date} date - O objeto Date a ser formatado. * @returns {string} A data formatada no formato local. */ formatToLocalString(date) { return date.toLocaleString(); } /** * Retorna um novo objeto Date representando o início do dia (meia-noite) da data fornecida. * * @param {Date} date - A data original. * @returns {Date} Um novo objeto Date representando a meia-noite do dia da data fornecida. */ getStartOfDay(date) { const newDate = new Date(date); newDate.setHours(0, 0, 0, 0); return newDate; } /** * Retorna um novo objeto Date representando o final do dia (23:59:59.999) da data fornecida. * * @param {Date} date - A data original. * @returns {Date} Um novo objeto Date representando o final do dia da data fornecida. */ getEndOfDay(date) { const newDate = new Date(date); newDate.setHours(23, 59, 59, 999); return newDate; } /** * Determina se um ano é bissexto ou não. * * @param {number} year - O ano a ser verificado. * @returns {boolean} Retorna 'true' se o ano for bissexto e 'false' caso contrário. */ isLeapYear(year) { return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0); } /** * Retorna o número de dias em um mês para um ano específico. * * @param {number} year - O ano a ser considerado. * @param {number} month - O mês a ser considerado (1 para Janeiro, 2 para Fevereiro, etc). * @returns {number} O número de dias no mês especificado para o ano fornecido. */ getDaysInMonth(year, month) { return new Date(year, month, 0).getDate(); } /** * Retorna o número de dias restantes até o final do mês para uma data específica. * * @param {Date} date - A data a ser considerada. * @returns {number} O número de dias restantes até o final do mês. */ getDaysRemainingInMonth(date) { const endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0); return endOfMonth.getDate() - date.getDate(); } } exports.default = laima;