1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { setDay } from "../../../setDay.js";
- import { Parser } from "../Parser.js";
- import { mapValue, parseNDigits } from "../utils.js";
- // Local day of week
- export class LocalDayParser 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 "e":
- case "ee": // 03
- return mapValue(parseNDigits(token.length, dateString), valueCallback);
- // 3rd
- case "eo":
- return mapValue(
- match.ordinalNumber(dateString, {
- unit: "day",
- }),
- valueCallback,
- );
- // Tue
- case "eee":
- return (
- match.day(dateString, {
- width: "abbreviated",
- context: "formatting",
- }) ||
- match.day(dateString, { width: "short", context: "formatting" }) ||
- match.day(dateString, { width: "narrow", context: "formatting" })
- );
- // T
- case "eeeee":
- return match.day(dateString, {
- width: "narrow",
- context: "formatting",
- });
- // Tu
- case "eeeeee":
- return (
- match.day(dateString, { width: "short", context: "formatting" }) ||
- match.day(dateString, { width: "narrow", context: "formatting" })
- );
- // Tuesday
- case "eeee":
- default:
- return (
- 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" })
- );
- }
- }
- 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",
- "c",
- "t",
- "T",
- ];
- }
|