ISOWeekParser.js 975 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { setISOWeek } from "../../../setISOWeek.js";
  2. import { startOfISOWeek } from "../../../startOfISOWeek.js";
  3. import { numericPatterns } from "../constants.js";
  4. import { Parser } from "../Parser.js";
  5. import { parseNDigits, parseNumericPattern } from "../utils.js";
  6. // ISO week of year
  7. export class ISOWeekParser extends Parser {
  8. priority = 100;
  9. parse(dateString, token, match) {
  10. switch (token) {
  11. case "I":
  12. return parseNumericPattern(numericPatterns.week, dateString);
  13. case "Io":
  14. return match.ordinalNumber(dateString, { unit: "week" });
  15. default:
  16. return parseNDigits(token.length, dateString);
  17. }
  18. }
  19. validate(_date, value) {
  20. return value >= 1 && value <= 53;
  21. }
  22. set(date, _flags, value) {
  23. return startOfISOWeek(setISOWeek(date, value));
  24. }
  25. incompatibleTokens = [
  26. "y",
  27. "Y",
  28. "u",
  29. "q",
  30. "Q",
  31. "M",
  32. "L",
  33. "w",
  34. "d",
  35. "D",
  36. "e",
  37. "c",
  38. "t",
  39. "T",
  40. ];
  41. }