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