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.

72 lines (71 loc) 2.23 kB
"use strict"; const addDays = require("./addDays.js"); const addHours = require("./addHours.js"); const addMilliseconds = require("./addMilliseconds.js"); const addMinutes = require("./addMinutes.js"); const addMonths = require("./addMonths.js"); const addSeconds = require("./addSeconds.js"); const addYears = require("./addYears.js"); const units = require("./units.js"); const normalizeUnit = require("./normalizeUnit-Cn0hUyBC.js"); const daysInMonth = require("./daysInMonth.js"); const constants = require("./constants-DR3SPJ7u.js"); 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.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.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 *= constants.MS_IN_HOUR; break; case MINUTE: num *= constants.MS_IN_MINUTE; break; case SECOND: num *= constants.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); } exports.addNumber = addNumber; exports.addObject = addObject;