UNPKG

@javiertinc/essentials

Version:

Una librería con variedad de funciones útiles que considero esenciales en la mayoría de los desarrollos web.

200 lines (199 loc) 8.01 kB
const date = { /** * Formatea una fecha a un formato específico * @param date - La fecha a formatear * @param format - El formato deseado (por defecto 'dd/mm/yyyy H:i:s') * @returns La fecha formateada como string **/ format(date, format = 'dd/mm/yyyy H:i:s') { const day = date.getDate().toString().padStart(2, '0'); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const year = date.getFullYear().toString(); const yearShort = year.slice(-2); const hours = date.getHours().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0'); const seconds = date.getSeconds().toString().padStart(2, '0'); return format.toLowerCase() .replace(/yyyy/g, year) .replace(/yy/g, yearShort) .replace(/dd/g, day) .replace(/mm/g, month) .replace(/h/g, hours) .replace(/i/g, minutes) .replace(/s/g, seconds); }, /** * Convierte una fecha a la zona horaria especificada * @param date - La fecha a convertir * @param timezone - La zona horaria a la cual convertir (por defecto 'America/Santiago') * @returns La fecha convertida a la zona horaria especificada **/ parseTimezone(date, timezone = 'America/Santiago') { return new Date(date.toLocaleString('es-CL', { timeZone: timezone })); }, /** * Calcula la cantidad de días entre dos fechas * @param date1 - Primera fecha * @param date2 - Segunda fecha * @returns La cantidad de días entre las dos fechas **/ daysBetween(date1, date2) { const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds return Math.round(Math.abs((date1.getTime() - date2.getTime()) / (oneDay))); }, time: { /** * Suma tiempo a una fecha * @param date - La fecha a la cual se le sumará el tiempo * @param time - Un objeto con horas, minutos y segundos a sumar * @param time.hours - Horas a sumar * @param time.minutes - Minutos a sumar * @param time.seconds - Segundos a sumar * @returns La nueva fecha con el tiempo sumado **/ add(date, time = {}) { const { hours = 0, minutes = 0, seconds = 0 } = time; date.setHours(date.getHours() + hours); date.setMinutes(date.getMinutes() + minutes); date.setSeconds(date.getSeconds() + seconds); return date; }, /** * Resta tiempo a una fecha * @param date - La fecha a la cual se le restará el tiempo * @param time - Un objeto con horas, minutos y segundos a restar * @param time.hours - Horas a restar * @param time.minutes - Minutos a restar * @param time.seconds - Segundos a restar * @returns La nueva fecha con el tiempo restado **/ sub(date, time = {}) { const { hours = 0, minutes = 0, seconds = 0 } = time; date.setHours(date.getHours() - hours); date.setMinutes(date.getMinutes() - minutes); date.setSeconds(date.getSeconds() - seconds); return date; } }, days: { /** * Suma días a una fecha * @param date - La fecha a la cual se le sumarán los días * @param days - La cantidad de días a sumar * @returns La nueva fecha con los días sumados **/ add(date, days) { const newDate = new Date(date); newDate.setUTCDate(newDate.getUTCDate() + days); newDate.setUTCHours(0, 0, 0, 0); return newDate; }, /** * Resta días a una fecha * @param date - La fecha a la cual se le restarán los días * @param days - La cantidad de días a restar * @returns La nueva fecha con los días restados **/ sub(date, days) { const newDate = new Date(date); newDate.setUTCDate(newDate.getUTCDate() - days); newDate.setUTCHours(0, 0, 0, 0); return newDate; } }, months: { /** * Suma meses a una fecha * @param date - La fecha a la cual se le sumarán los meses * @param months - La cantidad de meses a sumar * @returns La nueva fecha con los meses sumados **/ add(date, months) { const newDate = new Date(date); newDate.setUTCMonth(newDate.getUTCMonth() + months); newDate.setUTCHours(0, 0, 0, 0); return newDate; }, /** * Resta meses a una fecha * @param date - La fecha a la cual se le restarán los meses * @param months - La cantidad de meses a restar * @returns La nueva fecha con los meses restados **/ sub(date, months) { const newDate = new Date(date); newDate.setUTCMonth(newDate.getUTCMonth() - months); newDate.setUTCHours(0, 0, 0, 0); return newDate; } }, years: { /** * Suma años a una fecha * @param date - La fecha a la cual se le sumarán los años * @param years - La cantidad de años a sumar * @returns La nueva fecha con los años sumados **/ add(date, years) { const newDate = new Date(date); newDate.setUTCFullYear(newDate.getUTCFullYear() + years); newDate.setUTCHours(0, 0, 0, 0); return newDate; }, /** * Resta años a una fecha * @param date - La fecha a la cual se le restarán los años * @param years - La cantidad de años a restar * @returns La nueva fecha con los años restados **/ sub(date, years) { const newDate = new Date(date); newDate.setUTCFullYear(newDate.getUTCFullYear() - years); newDate.setUTCHours(0, 0, 0, 0); return newDate; } }, /** * Obtiene la edad a partir de una fecha de nacimiento * @param birthdate - Fecha de nacimiento en formato 'YYYY-MM-DD' * @returns Un objeto con años, meses y días **/ getAge(birthdate) { let today = new Date(); let birthDate = new Date(birthdate); let years = today.getFullYear() - birthDate.getFullYear(); let months = today.getMonth() - birthDate.getMonth(); let days = today.getDate() - birthDate.getDate(); if (months < 0 || (months === 0 && days < 0)) { years--; months += 12; } if (days < 0) { months--; const lastMonth = new Date(today.getFullYear(), today.getMonth() - 1, birthDate.getDate()); days = Math.floor((today.getTime() - lastMonth.getTime()) / (1000 * 60 * 60 * 24)); } return { years, months, days }; }, /** * Obtiene el nombre del día de la semana en el idioma especificado * @param date - La fecha de la cual obtener el día de la semana * @param locale - El código de idioma (ej: 'es-ES', 'en-US', 'fr-FR') * @returns El nombre del día de la semana en el idioma especificado **/ getDayOfWeek(date, locale = 'es-ES') { // Create a new date object to avoid modifying the original const utcDate = new Date(date.getTime() + (date.getTimezoneOffset() * 60000)); return utcDate.toLocaleDateString(locale, { weekday: 'long' }); }, /** * Obtiene el nombre del mes en el idioma especificado * @param date - La fecha de la cual obtener el mes * @param locale - El código de idioma (ej: 'es-ES', 'en-US', 'fr-FR') * @returns El nombre del mes en el idioma especificado **/ getMonth(date, locale = 'es-ES') { return date.toLocaleDateString(locale, { month: 'long' }); } }; export default date;