UNPKG

date-manip

Version:

A lightweight JavaScript date utility library that provides modularity, high performance, and additional features. It supports various date operations, including date addition and subtraction, formatting, comparison, etc.

73 lines (72 loc) 2.16 kB
import addDays from "./addDays.mjs"; import addHours from "./addHours.mjs"; import addMilliseconds from "./addMilliseconds.mjs"; import addMinutes from "./addMinutes.mjs"; import addMonths from "./addMonths.mjs"; import addSeconds from "./addSeconds.mjs"; import addYears from "./addYears.mjs"; import units from "./units.mjs"; import { n as normalizeUnit } from "./normalizeUnit-bp5SODxw.mjs"; import daysInMonth from "./daysInMonth.mjs"; import { c as MS_IN_SECOND, b as MS_IN_MINUTE, a as MS_IN_HOUR } from "./constants-BuFquuHl.mjs"; const { DAY: DAY$1, HOUR: HOUR$1, MINUTE: MINUTE$1, MONTH: MONTH$1, SECOND: SECOND$1, YEAR: YEAR$1 } = units; function addNumber(date, num, unit) { unit = normalizeUnit(unit); switch (unit) { case YEAR$1: return addYears(date, num); case MONTH$1: return addMonths(date, num); case DAY$1: return addDays(date, num); case HOUR$1: return addHours(date, num); case MINUTE$1: return addMinutes(date, num); case SECOND$1: return addSeconds(date, num); default: return addMilliseconds(date, num); } } const { DAY, HOUR, MINUTE, MONTH, SECOND, YEAR } = units; function addObject(date, obj, times) { let time = 0; let expectedMonth = 0; let expectedDay = 0; Object.entries(obj).forEach(([unit, num]) => { unit = normalizeUnit(unit); num *= times; switch (unit) { case YEAR: expectedMonth += num * 12; return; case MONTH: expectedMonth += date.getMonth() + num; return; case DAY: expectedDay = num; return; case HOUR: num *= MS_IN_HOUR; break; case MINUTE: num *= MS_IN_MINUTE; break; case SECOND: num *= MS_IN_SECOND; break; } time += num; }); if (expectedMonth) { const tempMaxDay = daysInMonth(new Date(date.getFullYear(), expectedMonth, 1, 0, 0, 0, 0)); const currentDay = date.getDate(); date.setMonth(expectedMonth, (currentDay > tempMaxDay ? tempMaxDay : currentDay) + expectedDay); } return addMilliseconds(date, time); } export { addObject as a, addNumber as b };