12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { numericPatterns } from "../constants.js";
- import { Parser } from "../Parser.js";
- import { mapValue, parseNDigits, parseNumericPattern } from "../utils.js";
- export class MonthParser extends Parser {
- incompatibleTokens = [
- "Y",
- "R",
- "q",
- "Q",
- "L",
- "w",
- "I",
- "D",
- "i",
- "e",
- "c",
- "t",
- "T",
- ];
- priority = 110;
- parse(dateString, token, match) {
- const valueCallback = (value) => value - 1;
- switch (token) {
- // 1, 2, ..., 12
- case "M":
- return mapValue(
- parseNumericPattern(numericPatterns.month, dateString),
- valueCallback,
- );
- // 01, 02, ..., 12
- case "MM":
- return mapValue(parseNDigits(2, dateString), valueCallback);
- // 1st, 2nd, ..., 12th
- case "Mo":
- return mapValue(
- match.ordinalNumber(dateString, {
- unit: "month",
- }),
- valueCallback,
- );
- // Jan, Feb, ..., Dec
- case "MMM":
- return (
- match.month(dateString, {
- width: "abbreviated",
- context: "formatting",
- }) ||
- match.month(dateString, { width: "narrow", context: "formatting" })
- );
- // J, F, ..., D
- case "MMMMM":
- return match.month(dateString, {
- width: "narrow",
- context: "formatting",
- });
- // January, February, ..., December
- case "MMMM":
- default:
- return (
- match.month(dateString, { width: "wide", context: "formatting" }) ||
- match.month(dateString, {
- width: "abbreviated",
- context: "formatting",
- }) ||
- match.month(dateString, { width: "narrow", context: "formatting" })
- );
- }
- }
- validate(_date, value) {
- return value >= 0 && value <= 11;
- }
- set(date, _flags, value) {
- date.setMonth(value, 1);
- date.setHours(0, 0, 0, 0);
- return date;
- }
- }
|