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