UNPKG

@parkingboss/api

Version:
76 lines (75 loc) 2.24 kB
import { isAfter, isWithinInterval, addDays } from "date-fns"; function intervalMin(valid) { if (!valid) return; if (valid.min) { return new Date(typeof valid.min === "string" ? valid.min : valid.min.utc); } else if (valid.interval && valid.interval.split) { let val = valid.interval.split("/")[0]; if (val) return new Date(val); } else if (valid.utc && valid.utc.split) { let val = valid.utc.split("/")[0]; if (val) return new Date(val); } } function intervalMax(valid) { if (!valid) return; if (valid.max) { return new Date(typeof valid.max === "string" ? valid.max : valid.max.utc); } else if (valid.interval && valid.interval.split) { let val = valid.interval.split("/")[1]; if (val) return new Date(val); } else if (valid.utc && valid.utc.split) { let val = valid.utc.split("/")[1]; if (val) return new Date(val); } } export function validToInterval(valid) { const start = intervalMin(valid); const end = intervalMax(valid); return { start, end }; } export function intervalIsValid(interval, now) { if (!interval) return false; now = now || new Date(); if (interval.end && interval.start) { return isWithinInterval(now, interval); } else if (interval.end) { return isAfter(interval.end, now); } else if (interval.start) { return isAfter(now, interval.start); } } export function isValid(valid, now) { now = now || new Date(); const interval = validToInterval(valid); return intervalIsValid(interval, now); } export function isInterval(x) { return x && (x.start instanceof Date || x.end instanceof Date); } export function intervalString(interval) { const { start, end } = interval; const startStr = start ? start.toISOString() : ""; const endStr = end ? end.toISOString() : ""; return `${startStr}/${endStr}`; } export function interval(from, to, now) { now = now || new Date(); return { start: from == null ? undefined : addDays(now, from), end: to == null ? undefined : addDays(now, to), }; }