@parkingboss/api
Version:
The Parking Boss API
76 lines (75 loc) • 2.24 kB
JavaScript
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),
};
}