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
JavaScript
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
};