studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
51 lines (50 loc) • 1.5 kB
JavaScript
import { Effect } from "../../effect.js";
const dateAdd = (date, interval, units) => Effect.try({
try: () => {
const ret = new Date(date);
const checkRollover = () => {
if (ret.getDate() !== date.getDate()) ret.setDate(0);
};
switch (String(interval).toLowerCase()) {
case "year":
ret.setFullYear(ret.getFullYear() + units);
checkRollover();
break;
case "quarter":
ret.setMonth(ret.getMonth() + 3 * units);
checkRollover();
break;
case "month":
ret.setMonth(ret.getMonth() + units);
checkRollover();
break;
case "week":
ret.setDate(ret.getDate() + 7 * units);
break;
case "day":
ret.setDate(ret.getDate() + units);
break;
case "hour":
ret.setTime(ret.getTime() + units * 36e5);
break;
case "minute":
ret.setTime(ret.getTime() + units * 6e4);
break;
case "second":
ret.setTime(ret.getTime() + units * 1e3);
break;
default: {
throw new RangeError(
`dateAdd: unsupported interval "${interval}". Expected one of ${["year", "quarter", "month", "week", "day", "hour", "minute", "second"].join(", ")}.`
);
}
}
return ret;
},
catch: () => new RangeError(
`dateAdd: unsupported interval "${interval}". Expected one of ${["year", "quarter", "month", "week", "day", "hour", "minute", "second"].join(", ")}.`
)
});
export {
dateAdd
};