UNPKG

@telerik/kendo-intl

Version:

A package exporting functions for date and number parsing and formatting

118 lines (96 loc) 2.86 kB
import { DEFAULT_LOCALE } from '../common/constants'; import isNumber from '../common/is-number'; import datePattern from './date-pattern'; import dateNameType from './date-name-type'; import { dateFormatRegExp, DATE_FIELD_MAP } from './constants'; import { localeInfo } from '../cldr'; var NAME_TYPES = { month: { type: 'months', minLength: 3, standAlone: 'L' }, quarter: { type: 'quarters', minLength: 3, standAlone: 'q' }, weekday: { type: 'days', minLength: { E: 0, c: 3, e: 3 }, standAlone: 'c' }, dayperiod: { type: 'dayPeriods', minLength: 0 }, era: { type: 'eras', minLength: 0 } }; var LITERAL = 'literal'; function addLiteral(parts, value) { var lastPart = parts[parts.length - 1]; if (lastPart && lastPart.type === LITERAL) { lastPart.pattern += value; } else { parts.push({ type: LITERAL, pattern: value }); } } function isHour12(pattern) { return pattern === 'h' || pattern === 'K'; } export default function splitDateFormat(format, locale) { if ( locale === void 0 ) locale = DEFAULT_LOCALE; var info = localeInfo(locale); var pattern = datePattern(format, info); var parts = []; var lastIndex = dateFormatRegExp.lastIndex = 0; var match = dateFormatRegExp.exec(pattern); while (match) { var value = match[0]; if (lastIndex < match.index) { addLiteral(parts, pattern.substring(lastIndex, match.index)); } if (value.startsWith('"') || value.startsWith("'")) { addLiteral(parts, value); } else { var specifier = value[0]; var type = DATE_FIELD_MAP[specifier]; var part = { type: type, pattern: value }; if (type === 'hour') { part.hour12 = isHour12(value); } var names = NAME_TYPES[type]; if (names) { var minLength = isNumber(names.minLength) ? names.minLength : names.minLength[specifier]; var patternLength = value.length; if (patternLength >= minLength) { part.names = { type: names.type, nameType: dateNameType(patternLength), standAlone: names.standAlone === specifier }; } } parts.push(part); } lastIndex = dateFormatRegExp.lastIndex; match = dateFormatRegExp.exec(pattern); } if (lastIndex < pattern.length) { addLiteral(parts, pattern.substring(lastIndex)); } return parts; }