chrono-node
Version:
A natural language date parser in Javascript
39 lines (30 loc) • 1.29 kB
text/typescript
import { OpUnitType, QUnitType } from "dayjs";
import { ParsingComponents } from "../results";
export type TimeUnits = { [c in OpUnitType | QUnitType]?: number };
export function reverseTimeUnits(timeUnits: TimeUnits): TimeUnits {
const reversed = {};
for (const key in timeUnits) {
// noinspection JSUnfilteredForInLoop
reversed[key] = -timeUnits[key];
}
return reversed as TimeUnits;
}
export function addImpliedTimeUnits(components: ParsingComponents, timeUnits: TimeUnits): ParsingComponents {
const output = components.clone();
let date = components.dayjs();
for (const key in timeUnits) {
// noinspection JSUnfilteredForInLoop,TypeScriptValidateTypes
date = date.add(timeUnits[key], key as QUnitType);
}
if ("day" in timeUnits || "d" in timeUnits || "week" in timeUnits || "month" in timeUnits || "year" in timeUnits) {
output.imply("day", date.date());
output.imply("month", date.month() + 1);
output.imply("year", date.year());
}
if ("second" in timeUnits || "minute" in timeUnits || "hour" in timeUnits) {
output.imply("second", date.second());
output.imply("minute", date.minute());
output.imply("hour", date.hour());
}
return output;
}