123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- "use strict";
- exports.dayPeriodEnumToHours = dayPeriodEnumToHours;
- exports.isLeapYearIndex = isLeapYearIndex;
- exports.mapValue = mapValue;
- exports.normalizeTwoDigitYear = normalizeTwoDigitYear;
- exports.parseAnyDigitsSigned = parseAnyDigitsSigned;
- exports.parseNDigits = parseNDigits;
- exports.parseNDigitsSigned = parseNDigitsSigned;
- exports.parseNumericPattern = parseNumericPattern;
- exports.parseTimezonePattern = parseTimezonePattern;
- var _index = require("../../constants.cjs");
- var _constants = require("./constants.cjs");
- function mapValue(parseFnResult, mapFn) {
- if (!parseFnResult) {
- return parseFnResult;
- }
- return {
- value: mapFn(parseFnResult.value),
- rest: parseFnResult.rest,
- };
- }
- function parseNumericPattern(pattern, dateString) {
- const matchResult = dateString.match(pattern);
- if (!matchResult) {
- return null;
- }
- return {
- value: parseInt(matchResult[0], 10),
- rest: dateString.slice(matchResult[0].length),
- };
- }
- function parseTimezonePattern(pattern, dateString) {
- const matchResult = dateString.match(pattern);
- if (!matchResult) {
- return null;
- }
- // Input is 'Z'
- if (matchResult[0] === "Z") {
- return {
- value: 0,
- rest: dateString.slice(1),
- };
- }
- const sign = matchResult[1] === "+" ? 1 : -1;
- const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
- const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
- const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
- return {
- value:
- sign *
- (hours * _index.millisecondsInHour +
- minutes * _index.millisecondsInMinute +
- seconds * _index.millisecondsInSecond),
- rest: dateString.slice(matchResult[0].length),
- };
- }
- function parseAnyDigitsSigned(dateString) {
- return parseNumericPattern(
- _constants.numericPatterns.anyDigitsSigned,
- dateString,
- );
- }
- function parseNDigits(n, dateString) {
- switch (n) {
- case 1:
- return parseNumericPattern(
- _constants.numericPatterns.singleDigit,
- dateString,
- );
- case 2:
- return parseNumericPattern(
- _constants.numericPatterns.twoDigits,
- dateString,
- );
- case 3:
- return parseNumericPattern(
- _constants.numericPatterns.threeDigits,
- dateString,
- );
- case 4:
- return parseNumericPattern(
- _constants.numericPatterns.fourDigits,
- dateString,
- );
- default:
- return parseNumericPattern(new RegExp("^\\d{1," + n + "}"), dateString);
- }
- }
- function parseNDigitsSigned(n, dateString) {
- switch (n) {
- case 1:
- return parseNumericPattern(
- _constants.numericPatterns.singleDigitSigned,
- dateString,
- );
- case 2:
- return parseNumericPattern(
- _constants.numericPatterns.twoDigitsSigned,
- dateString,
- );
- case 3:
- return parseNumericPattern(
- _constants.numericPatterns.threeDigitsSigned,
- dateString,
- );
- case 4:
- return parseNumericPattern(
- _constants.numericPatterns.fourDigitsSigned,
- dateString,
- );
- default:
- return parseNumericPattern(new RegExp("^-?\\d{1," + n + "}"), dateString);
- }
- }
- function dayPeriodEnumToHours(dayPeriod) {
- switch (dayPeriod) {
- case "morning":
- return 4;
- case "evening":
- return 17;
- case "pm":
- case "noon":
- case "afternoon":
- return 12;
- case "am":
- case "midnight":
- case "night":
- default:
- return 0;
- }
- }
- function normalizeTwoDigitYear(twoDigitYear, currentYear) {
- const isCommonEra = currentYear > 0;
- // Absolute number of the current year:
- // 1 -> 1 AC
- // 0 -> 1 BC
- // -1 -> 2 BC
- const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
- let result;
- if (absCurrentYear <= 50) {
- result = twoDigitYear || 100;
- } else {
- const rangeEnd = absCurrentYear + 50;
- const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;
- const isPreviousCentury = twoDigitYear >= rangeEnd % 100;
- result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
- }
- return isCommonEra ? result : 1 - result;
- }
- function isLeapYearIndex(year) {
- return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);
- }
|