DateParser.cjs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. "use strict";
  2. exports.DateParser = void 0;
  3. var _constants = require("../constants.cjs");
  4. var _Parser = require("../Parser.cjs");
  5. var _utils = require("../utils.cjs");
  6. const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  7. const DAYS_IN_MONTH_LEAP_YEAR = [
  8. 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
  9. ];
  10. // Day of the month
  11. class DateParser extends _Parser.Parser {
  12. priority = 90;
  13. subPriority = 1;
  14. parse(dateString, token, match) {
  15. switch (token) {
  16. case "d":
  17. return (0, _utils.parseNumericPattern)(
  18. _constants.numericPatterns.date,
  19. dateString,
  20. );
  21. case "do":
  22. return match.ordinalNumber(dateString, { unit: "date" });
  23. default:
  24. return (0, _utils.parseNDigits)(token.length, dateString);
  25. }
  26. }
  27. validate(date, value) {
  28. const year = date.getFullYear();
  29. const isLeapYear = (0, _utils.isLeapYearIndex)(year);
  30. const month = date.getMonth();
  31. if (isLeapYear) {
  32. return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
  33. } else {
  34. return value >= 1 && value <= DAYS_IN_MONTH[month];
  35. }
  36. }
  37. set(date, _flags, value) {
  38. date.setDate(value);
  39. date.setHours(0, 0, 0, 0);
  40. return date;
  41. }
  42. incompatibleTokens = [
  43. "Y",
  44. "R",
  45. "q",
  46. "Q",
  47. "w",
  48. "I",
  49. "D",
  50. "i",
  51. "e",
  52. "c",
  53. "t",
  54. "T",
  55. ];
  56. }
  57. exports.DateParser = DateParser;