import { setDay } from "../../../setDay.mjs"; import { Parser } from "../Parser.mjs"; import { mapValue, parseNDigits } from "../utils.mjs"; // Stand-alone local day of week export class StandAloneLocalDayParser extends Parser { priority = 90; parse(dateString, token, match, options) { const valueCallback = (value) => { // We want here floor instead of trunc, so we get -7 for value 0 instead of 0 const wholeWeekDays = Math.floor((value - 1) / 7) * 7; return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays; }; switch (token) { // 3 case "c": case "cc": // 03 return mapValue(parseNDigits(token.length, dateString), valueCallback); // 3rd case "co": return mapValue( match.ordinalNumber(dateString, { unit: "day", }), valueCallback, ); // Tue case "ccc": return ( match.day(dateString, { width: "abbreviated", context: "standalone", }) || match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" }) ); // T case "ccccc": return match.day(dateString, { width: "narrow", context: "standalone", }); // Tu case "cccccc": return ( match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" }) ); // Tuesday case "cccc": default: return ( match.day(dateString, { width: "wide", context: "standalone" }) || match.day(dateString, { width: "abbreviated", context: "standalone", }) || match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" }) ); } } validate(_date, value) { return value >= 0 && value <= 6; } set(date, _flags, value, options) { date = setDay(date, value, options); date.setHours(0, 0, 0, 0); return date; } incompatibleTokens = [ "y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "E", "i", "e", "t", "T", ]; }