chrono-node
Version:
A natural language date parser in Javascript
124 lines • 4.88 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.addDuration = addDuration;
exports.reverseDuration = reverseDuration;
function addDuration(ref, duration) {
var _a, _b, _c, _d, _e, _f, _g;
let date = new Date(ref);
if (duration["y"]) {
duration["year"] = duration["y"];
delete duration["y"];
}
if (duration["mo"]) {
duration["month"] = duration["mo"];
delete duration["mo"];
}
if (duration["M"]) {
duration["month"] = duration["M"];
delete duration["M"];
}
if (duration["w"]) {
duration["week"] = duration["w"];
delete duration["w"];
}
if (duration["d"]) {
duration["day"] = duration["d"];
delete duration["d"];
}
if (duration["h"]) {
duration["hour"] = duration["h"];
delete duration["h"];
}
if (duration["m"]) {
duration["minute"] = duration["m"];
delete duration["m"];
}
if (duration["s"]) {
duration["second"] = duration["s"];
delete duration["s"];
}
if (duration["ms"]) {
duration["millisecond"] = duration["ms"];
delete duration["ms"];
}
if ("year" in duration) {
const floor = Math.floor(duration["year"]);
date.setFullYear(date.getFullYear() + floor);
const remainingFraction = duration["year"] - floor;
if (remainingFraction > 0) {
duration.month = (_a = duration === null || duration === void 0 ? void 0 : duration.month) !== null && _a !== void 0 ? _a : 0;
duration.month += remainingFraction * 12;
}
}
if ("quarter" in duration) {
const floor = Math.floor(duration["quarter"]);
date.setMonth(date.getMonth() + floor * 3);
}
if ("month" in duration) {
const floor = Math.floor(duration["month"]);
date.setMonth(date.getMonth() + floor);
const remainingFraction = duration["month"] - floor;
if (remainingFraction > 0) {
duration.week = (_b = duration === null || duration === void 0 ? void 0 : duration.week) !== null && _b !== void 0 ? _b : 0;
duration.week += remainingFraction * 4;
}
}
if ("week" in duration) {
const floor = Math.floor(duration["week"]);
date.setDate(date.getDate() + floor * 7);
const remainingFraction = duration["week"] - floor;
if (remainingFraction > 0) {
duration.day = (_c = duration === null || duration === void 0 ? void 0 : duration.day) !== null && _c !== void 0 ? _c : 0;
duration.day += Math.round(remainingFraction * 7);
}
}
if ("day" in duration) {
const floor = Math.floor(duration["day"]);
date.setDate(date.getDate() + floor);
const remainingFraction = duration["day"] - floor;
if (remainingFraction > 0) {
duration.hour = (_d = duration === null || duration === void 0 ? void 0 : duration.hour) !== null && _d !== void 0 ? _d : 0;
duration.hour += Math.round(remainingFraction * 24);
}
}
if ("hour" in duration) {
const floor = Math.floor(duration["hour"]);
date.setHours(date.getHours() + floor);
const remainingFraction = duration["hour"] - floor;
if (remainingFraction > 0) {
duration.minute = (_e = duration === null || duration === void 0 ? void 0 : duration.minute) !== null && _e !== void 0 ? _e : 0;
duration.minute += Math.round(remainingFraction * 60);
}
}
if ("minute" in duration) {
const floor = Math.floor(duration["minute"]);
date.setMinutes(date.getMinutes() + floor);
const remainingFraction = duration["minute"] - floor;
if (remainingFraction > 0) {
duration.second = (_f = duration === null || duration === void 0 ? void 0 : duration.second) !== null && _f !== void 0 ? _f : 0;
duration.second += Math.round(remainingFraction * 60);
}
}
if ("second" in duration) {
const floor = Math.floor(duration["second"]);
date.setSeconds(date.getSeconds() + floor);
const remainingFraction = duration["second"] - floor;
if (remainingFraction > 0) {
duration.millisecond = (_g = duration === null || duration === void 0 ? void 0 : duration.millisecond) !== null && _g !== void 0 ? _g : 0;
duration.millisecond += Math.round(remainingFraction * 1000);
}
}
if ("millisecond" in duration) {
const floor = Math.floor(duration["millisecond"]);
date.setMilliseconds(date.getMilliseconds() + floor);
}
return date;
}
function reverseDuration(duration) {
const reversed = {};
for (const key in duration) {
reversed[key] = -duration[key];
}
return reversed;
}
//# sourceMappingURL=duration.js.map
;