MonthParser.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { numericPatterns } from "../constants.js";
  2. import { Parser } from "../Parser.js";
  3. import { mapValue, parseNDigits, parseNumericPattern } from "../utils.js";
  4. export class MonthParser extends Parser {
  5. incompatibleTokens = [
  6. "Y",
  7. "R",
  8. "q",
  9. "Q",
  10. "L",
  11. "w",
  12. "I",
  13. "D",
  14. "i",
  15. "e",
  16. "c",
  17. "t",
  18. "T",
  19. ];
  20. priority = 110;
  21. parse(dateString, token, match) {
  22. const valueCallback = (value) => value - 1;
  23. switch (token) {
  24. // 1, 2, ..., 12
  25. case "M":
  26. return mapValue(
  27. parseNumericPattern(numericPatterns.month, dateString),
  28. valueCallback,
  29. );
  30. // 01, 02, ..., 12
  31. case "MM":
  32. return mapValue(parseNDigits(2, dateString), valueCallback);
  33. // 1st, 2nd, ..., 12th
  34. case "Mo":
  35. return mapValue(
  36. match.ordinalNumber(dateString, {
  37. unit: "month",
  38. }),
  39. valueCallback,
  40. );
  41. // Jan, Feb, ..., Dec
  42. case "MMM":
  43. return (
  44. match.month(dateString, {
  45. width: "abbreviated",
  46. context: "formatting",
  47. }) ||
  48. match.month(dateString, { width: "narrow", context: "formatting" })
  49. );
  50. // J, F, ..., D
  51. case "MMMMM":
  52. return match.month(dateString, {
  53. width: "narrow",
  54. context: "formatting",
  55. });
  56. // January, February, ..., December
  57. case "MMMM":
  58. default:
  59. return (
  60. match.month(dateString, { width: "wide", context: "formatting" }) ||
  61. match.month(dateString, {
  62. width: "abbreviated",
  63. context: "formatting",
  64. }) ||
  65. match.month(dateString, { width: "narrow", context: "formatting" })
  66. );
  67. }
  68. }
  69. validate(_date, value) {
  70. return value >= 0 && value <= 11;
  71. }
  72. set(date, _flags, value) {
  73. date.setMonth(value, 1);
  74. date.setHours(0, 0, 0, 0);
  75. return date;
  76. }
  77. }