UNPKG

chrono-node

Version:

A natural language date parser in Javascript

60 lines 2.34 kB
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