UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

51 lines (50 loc) 1.5 kB
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 };