123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { setDay } from "../../../setDay.js";
- import { Parser } from "../Parser.js";
- import { mapValue, parseNDigits } from "../utils.js";
- // 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",
- ];
- }
|