ISOTimezoneParser.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { constructFrom } from "../../../constructFrom.js";
  2. import { getTimezoneOffsetInMilliseconds } from "../../../_lib/getTimezoneOffsetInMilliseconds.js";
  3. import { timezonePatterns } from "../constants.js";
  4. import { Parser } from "../Parser.js";
  5. import { parseTimezonePattern } from "../utils.js";
  6. // Timezone (ISO-8601)
  7. export class ISOTimezoneParser extends Parser {
  8. priority = 10;
  9. parse(dateString, token) {
  10. switch (token) {
  11. case "x":
  12. return parseTimezonePattern(
  13. timezonePatterns.basicOptionalMinutes,
  14. dateString,
  15. );
  16. case "xx":
  17. return parseTimezonePattern(timezonePatterns.basic, dateString);
  18. case "xxxx":
  19. return parseTimezonePattern(
  20. timezonePatterns.basicOptionalSeconds,
  21. dateString,
  22. );
  23. case "xxxxx":
  24. return parseTimezonePattern(
  25. timezonePatterns.extendedOptionalSeconds,
  26. dateString,
  27. );
  28. case "xxx":
  29. default:
  30. return parseTimezonePattern(timezonePatterns.extended, dateString);
  31. }
  32. }
  33. set(date, flags, value) {
  34. if (flags.timestampIsSet) return date;
  35. return constructFrom(
  36. date,
  37. date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,
  38. );
  39. }
  40. incompatibleTokens = ["t", "T", "X"];
  41. }