123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import { millisecondsInHour, millisecondsInMinute, millisecondsInSecond } from "../../constants/index.js";
- import { numericPatterns } from "./constants.js";
- export function mapValue(parseFnResult, mapFn) {
- if (!parseFnResult) {
- return parseFnResult;
- }
- return {
- value: mapFn(parseFnResult.value),
- rest: parseFnResult.rest
- };
- }
- export function parseNumericPattern(pattern, dateString) {
- var matchResult = dateString.match(pattern);
- if (!matchResult) {
- return null;
- }
- return {
- value: parseInt(matchResult[0], 10),
- rest: dateString.slice(matchResult[0].length)
- };
- }
- export function parseTimezonePattern(pattern, dateString) {
- var matchResult = dateString.match(pattern);
- if (!matchResult) {
- return null;
- }
- // Input is 'Z'
- if (matchResult[0] === 'Z') {
- return {
- value: 0,
- rest: dateString.slice(1)
- };
- }
- var sign = matchResult[1] === '+' ? 1 : -1;
- var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
- var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
- var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
- return {
- value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),
- rest: dateString.slice(matchResult[0].length)
- };
- }
- export function parseAnyDigitsSigned(dateString) {
- return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);
- }
- export function parseNDigits(n, dateString) {
- switch (n) {
- case 1:
- return parseNumericPattern(numericPatterns.singleDigit, dateString);
- case 2:
- return parseNumericPattern(numericPatterns.twoDigits, dateString);
- case 3:
- return parseNumericPattern(numericPatterns.threeDigits, dateString);
- case 4:
- return parseNumericPattern(numericPatterns.fourDigits, dateString);
- default:
- return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), dateString);
- }
- }
- export function parseNDigitsSigned(n, dateString) {
- switch (n) {
- case 1:
- return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);
- case 2:
- return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);
- case 3:
- return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);
- case 4:
- return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);
- default:
- return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), dateString);
- }
- }
- export 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;
- }
- }
- export function normalizeTwoDigitYear(twoDigitYear, currentYear) {
- var isCommonEra = currentYear > 0;
- // Absolute number of the current year:
- // 1 -> 1 AC
- // 0 -> 1 BC
- // -1 -> 2 BC
- var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
- var result;
- if (absCurrentYear <= 50) {
- result = twoDigitYear || 100;
- } else {
- var rangeEnd = absCurrentYear + 50;
- var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;
- var isPreviousCentury = twoDigitYear >= rangeEnd % 100;
- result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
- }
- return isCommonEra ? result : 1 - result;
- }
- export function isLeapYearIndex(year) {
- return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
- }
|