chrono-node
Version:
A natural language date parser in Javascript
60 lines • 2.34 kB
JavaScript
import { Weekday } from "../../types.js";
import { ParsingComponents } from "../../results.js";
import { addImpliedTimeUnits } from "../../utils/timeunits.js";
export function createParsingComponentsAtWeekday(reference, weekday, modifier) {
const refDate = reference.getDateWithAdjustedTimezone();
const daysToWeekday = getDaysToWeekday(refDate, weekday, modifier);
let components = new ParsingComponents(reference);
components = addImpliedTimeUnits(components, { "day": daysToWeekday });
components.assign("weekday", weekday);
return components;
}
export function getDaysToWeekday(refDate, weekday, modifier) {
const refWeekday = refDate.getDay();
switch (modifier) {
case "this":
return getDaysForwardToWeekday(refDate, weekday);
case "last":
return getBackwardDaysToWeekday(refDate, weekday);
case "next":
if (refWeekday == Weekday.SUNDAY) {
return weekday == Weekday.SUNDAY ? 7 : weekday;
}
if (refWeekday == Weekday.SATURDAY) {
if (weekday == Weekday.SATURDAY)
return 7;
if (weekday == Weekday.SUNDAY)
return 8;
return 1 + weekday;
}
if (weekday < refWeekday && weekday != Weekday.SUNDAY) {
return getDaysForwardToWeekday(refDate, weekday);
}
else {
return getDaysForwardToWeekday(refDate, weekday) + 7;
}
}
return getDaysToWeekdayClosest(refDate, weekday);
}
export function getDaysToWeekdayClosest(refDate, weekday) {
const backward = getBackwardDaysToWeekday(refDate, weekday);
const forward = getDaysForwardToWeekday(refDate, weekday);
return forward < -backward ? forward : backward;
}
export function getDaysForwardToWeekday(refDate, weekday) {
const refWeekday = refDate.getDay();
let forwardCount = weekday - refWeekday;
if (forwardCount < 0) {
forwardCount += 7;
}
return forwardCount;
}
export function getBackwardDaysToWeekday(refDate, weekday) {
const refWeekday = refDate.getDay();
let backwardCount = weekday - refWeekday;
if (backwardCount >= 0) {
backwardCount -= 7;
}
return backwardCount;
}
//# sourceMappingURL=weekdays.js.map