123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import { setISODay } from "../../../setISODay.js";
- import { Parser } from "../Parser.js";
- import { mapValue, parseNDigits } from "../utils.js";
- // ISO day of week
- export class ISODayParser extends Parser {
- priority = 90;
- parse(dateString, token, match) {
- const valueCallback = (value) => {
- if (value === 0) {
- return 7;
- }
- return value;
- };
- switch (token) {
- // 2
- case "i":
- case "ii": // 02
- return parseNDigits(token.length, dateString);
- // 2nd
- case "io":
- return match.ordinalNumber(dateString, { unit: "day" });
- // Tue
- case "iii":
- return mapValue(
- match.day(dateString, {
- width: "abbreviated",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "short",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "narrow",
- context: "formatting",
- }),
- valueCallback,
- );
- // T
- case "iiiii":
- return mapValue(
- match.day(dateString, {
- width: "narrow",
- context: "formatting",
- }),
- valueCallback,
- );
- // Tu
- case "iiiiii":
- return mapValue(
- match.day(dateString, {
- width: "short",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "narrow",
- context: "formatting",
- }),
- valueCallback,
- );
- // Tuesday
- case "iiii":
- default:
- return mapValue(
- match.day(dateString, {
- width: "wide",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "abbreviated",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "short",
- context: "formatting",
- }) ||
- match.day(dateString, {
- width: "narrow",
- context: "formatting",
- }),
- valueCallback,
- );
- }
- }
- validate(_date, value) {
- return value >= 1 && value <= 7;
- }
- set(date, _flags, value) {
- date = setISODay(date, value);
- date.setHours(0, 0, 0, 0);
- return date;
- }
- incompatibleTokens = [
- "y",
- "Y",
- "u",
- "q",
- "Q",
- "M",
- "L",
- "w",
- "d",
- "D",
- "E",
- "e",
- "c",
- "t",
- "T",
- ];
- }
|