You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					1521 lines
				
				43 KiB
			
		
		
			
		
	
	
					1521 lines
				
				43 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = void 0; | ||
|  | 
 | ||
|  | var _index = _interopRequireDefault(require("../../../_lib/getUTCWeekYear/index.js")); | ||
|  | 
 | ||
|  | var _index2 = _interopRequireDefault(require("../../../_lib/setUTCDay/index.js")); | ||
|  | 
 | ||
|  | var _index3 = _interopRequireDefault(require("../../../_lib/setUTCISODay/index.js")); | ||
|  | 
 | ||
|  | var _index4 = _interopRequireDefault(require("../../../_lib/setUTCISOWeek/index.js")); | ||
|  | 
 | ||
|  | var _index5 = _interopRequireDefault(require("../../../_lib/setUTCWeek/index.js")); | ||
|  | 
 | ||
|  | var _index6 = _interopRequireDefault(require("../../../_lib/startOfUTCISOWeek/index.js")); | ||
|  | 
 | ||
|  | var _index7 = _interopRequireDefault(require("../../../_lib/startOfUTCWeek/index.js")); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | var MILLISECONDS_IN_HOUR = 3600000; | ||
|  | var MILLISECONDS_IN_MINUTE = 60000; | ||
|  | var MILLISECONDS_IN_SECOND = 1000; | ||
|  | var numericPatterns = { | ||
|  |   month: /^(1[0-2]|0?\d)/, | ||
|  |   // 0 to 12
 | ||
|  |   date: /^(3[0-1]|[0-2]?\d)/, | ||
|  |   // 0 to 31
 | ||
|  |   dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, | ||
|  |   // 0 to 366
 | ||
|  |   week: /^(5[0-3]|[0-4]?\d)/, | ||
|  |   // 0 to 53
 | ||
|  |   hour23h: /^(2[0-3]|[0-1]?\d)/, | ||
|  |   // 0 to 23
 | ||
|  |   hour24h: /^(2[0-4]|[0-1]?\d)/, | ||
|  |   // 0 to 24
 | ||
|  |   hour11h: /^(1[0-1]|0?\d)/, | ||
|  |   // 0 to 11
 | ||
|  |   hour12h: /^(1[0-2]|0?\d)/, | ||
|  |   // 0 to 12
 | ||
|  |   minute: /^[0-5]?\d/, | ||
|  |   // 0 to 59
 | ||
|  |   second: /^[0-5]?\d/, | ||
|  |   // 0 to 59
 | ||
|  |   singleDigit: /^\d/, | ||
|  |   // 0 to 9
 | ||
|  |   twoDigits: /^\d{1,2}/, | ||
|  |   // 0 to 99
 | ||
|  |   threeDigits: /^\d{1,3}/, | ||
|  |   // 0 to 999
 | ||
|  |   fourDigits: /^\d{1,4}/, | ||
|  |   // 0 to 9999
 | ||
|  |   anyDigitsSigned: /^-?\d+/, | ||
|  |   singleDigitSigned: /^-?\d/, | ||
|  |   // 0 to 9, -0 to -9
 | ||
|  |   twoDigitsSigned: /^-?\d{1,2}/, | ||
|  |   // 0 to 99, -0 to -99
 | ||
|  |   threeDigitsSigned: /^-?\d{1,3}/, | ||
|  |   // 0 to 999, -0 to -999
 | ||
|  |   fourDigitsSigned: /^-?\d{1,4}/ // 0 to 9999, -0 to -9999
 | ||
|  | 
 | ||
|  | }; | ||
|  | var timezonePatterns = { | ||
|  |   basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, | ||
|  |   basic: /^([+-])(\d{2})(\d{2})|Z/, | ||
|  |   basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, | ||
|  |   extended: /^([+-])(\d{2}):(\d{2})|Z/, | ||
|  |   extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/ | ||
|  | }; | ||
|  | 
 | ||
|  | function parseNumericPattern(pattern, string, valueCallback) { | ||
|  |   var matchResult = string.match(pattern); | ||
|  | 
 | ||
|  |   if (!matchResult) { | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   var value = parseInt(matchResult[0], 10); | ||
|  |   return { | ||
|  |     value: valueCallback ? valueCallback(value) : value, | ||
|  |     rest: string.slice(matchResult[0].length) | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | function parseTimezonePattern(pattern, string) { | ||
|  |   var matchResult = string.match(pattern); | ||
|  | 
 | ||
|  |   if (!matchResult) { | ||
|  |     return null; | ||
|  |   } // Input is 'Z'
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   if (matchResult[0] === 'Z') { | ||
|  |     return { | ||
|  |       value: 0, | ||
|  |       rest: string.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 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND), | ||
|  |     rest: string.slice(matchResult[0].length) | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | function parseAnyDigitsSigned(string, valueCallback) { | ||
|  |   return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback); | ||
|  | } | ||
|  | 
 | ||
|  | function parseNDigits(n, string, valueCallback) { | ||
|  |   switch (n) { | ||
|  |     case 1: | ||
|  |       return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback); | ||
|  | 
 | ||
|  |     case 2: | ||
|  |       return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback); | ||
|  | 
 | ||
|  |     case 3: | ||
|  |       return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback); | ||
|  | 
 | ||
|  |     case 4: | ||
|  |       return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback); | ||
|  | 
 | ||
|  |     default: | ||
|  |       return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), string, valueCallback); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function parseNDigitsSigned(n, string, valueCallback) { | ||
|  |   switch (n) { | ||
|  |     case 1: | ||
|  |       return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback); | ||
|  | 
 | ||
|  |     case 2: | ||
|  |       return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback); | ||
|  | 
 | ||
|  |     case 3: | ||
|  |       return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback); | ||
|  | 
 | ||
|  |     case 4: | ||
|  |       return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback); | ||
|  | 
 | ||
|  |     default: | ||
|  |       return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), string, valueCallback); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function dayPeriodEnumToHours(enumValue) { | ||
|  |   switch (enumValue) { | ||
|  |     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) { | ||
|  |   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; | ||
|  | } | ||
|  | 
 | ||
|  | var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; | ||
|  | var DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation
 | ||
|  | 
 | ||
|  | function isLeapYearIndex(year) { | ||
|  |   return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; | ||
|  | } | ||
|  | /* | ||
|  |  * |     | Unit                           |     | Unit                           | | ||
|  |  * |-----|--------------------------------|-----|--------------------------------| | ||
|  |  * |  a  | AM, PM                         |  A* | Milliseconds in day            | | ||
|  |  * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            | | ||
|  |  * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   | | ||
|  |  * |  d  | Day of month                   |  D  | Day of year                    | | ||
|  |  * |  e  | Local day of week              |  E  | Day of week                    | | ||
|  |  * |  f  |                                |  F* | Day of week in month           | | ||
|  |  * |  g* | Modified Julian day            |  G  | Era                            | | ||
|  |  * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    | | ||
|  |  * |  i! | ISO day of week                |  I! | ISO week of year               | | ||
|  |  * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  | | ||
|  |  * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    | | ||
|  |  * |  l* | (deprecated)                   |  L  | Stand-alone month              | | ||
|  |  * |  m  | Minute                         |  M  | Month                          | | ||
|  |  * |  n  |                                |  N  |                                | | ||
|  |  * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 | | ||
|  |  * |  p  |                                |  P  |                                | | ||
|  |  * |  q  | Stand-alone quarter            |  Q  | Quarter                        | | ||
|  |  * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        | | ||
|  |  * |  s  | Second                         |  S  | Fraction of second             | | ||
|  |  * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         | | ||
|  |  * |  u  | Extended year                  |  U* | Cyclic year                    | | ||
|  |  * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            | | ||
|  |  * |  w  | Local week of year             |  W* | Week of month                  | | ||
|  |  * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            | | ||
|  |  * |  y  | Year (abs)                     |  Y  | Local week-numbering year      | | ||
|  |  * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             | | ||
|  |  * | ||
|  |  * Letters marked by * are not implemented but reserved by Unicode standard. | ||
|  |  * | ||
|  |  * Letters marked by ! are non-standard, but implemented by date-fns: | ||
|  |  * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs) | ||
|  |  * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days, | ||
|  |  *   i.e. 7 for Sunday, 1 for Monday, etc. | ||
|  |  * - `I` is ISO week of year, as opposed to `w` which is local week of year. | ||
|  |  * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year. | ||
|  |  *   `R` is supposed to be used in conjunction with `I` and `i` | ||
|  |  *   for universal ISO week-numbering date, whereas | ||
|  |  *   `Y` is supposed to be used in conjunction with `w` and `e` | ||
|  |  *   for week-numbering date specific to the locale. | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | var parsers = { | ||
|  |   // Era
 | ||
|  |   G: { | ||
|  |     priority: 140, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         // AD, BC
 | ||
|  |         case 'G': | ||
|  |         case 'GG': | ||
|  |         case 'GGG': | ||
|  |           return match.era(string, { | ||
|  |             width: 'abbreviated' | ||
|  |           }) || match.era(string, { | ||
|  |             width: 'narrow' | ||
|  |           }); | ||
|  |         // A, B
 | ||
|  | 
 | ||
|  |         case 'GGGGG': | ||
|  |           return match.era(string, { | ||
|  |             width: 'narrow' | ||
|  |           }); | ||
|  |         // Anno Domini, Before Christ
 | ||
|  | 
 | ||
|  |         case 'GGGG': | ||
|  |         default: | ||
|  |           return match.era(string, { | ||
|  |             width: 'wide' | ||
|  |           }) || match.era(string, { | ||
|  |             width: 'abbreviated' | ||
|  |           }) || match.era(string, { | ||
|  |             width: 'narrow' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, flags, value, _options) { | ||
|  |       flags.era = value; | ||
|  |       date.setUTCFullYear(value, 0, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['R', 'u', 't', 'T'] | ||
|  |   }, | ||
|  |   // Year
 | ||
|  |   y: { | ||
|  |     // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns
 | ||
|  |     // | Year     |     y | yy |   yyy |  yyyy | yyyyy |
 | ||
|  |     // |----------|-------|----|-------|-------|-------|
 | ||
|  |     // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |
 | ||
|  |     // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |
 | ||
|  |     // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |
 | ||
|  |     // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |
 | ||
|  |     // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
 | ||
|  |     priority: 130, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       var valueCallback = function (year) { | ||
|  |         return { | ||
|  |           year: year, | ||
|  |           isTwoDigitYear: token === 'yy' | ||
|  |         }; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         case 'y': | ||
|  |           return parseNDigits(4, string, valueCallback); | ||
|  | 
 | ||
|  |         case 'yo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'year', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string, valueCallback); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value.isTwoDigitYear || value.year > 0; | ||
|  |     }, | ||
|  |     set: function (date, flags, value, _options) { | ||
|  |       var currentYear = date.getUTCFullYear(); | ||
|  | 
 | ||
|  |       if (value.isTwoDigitYear) { | ||
|  |         var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); | ||
|  |         date.setUTCFullYear(normalizedTwoDigitYear, 0, 1); | ||
|  |         date.setUTCHours(0, 0, 0, 0); | ||
|  |         return date; | ||
|  |       } | ||
|  | 
 | ||
|  |       var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; | ||
|  |       date.setUTCFullYear(year, 0, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Local week-numbering year
 | ||
|  |   Y: { | ||
|  |     priority: 130, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       var valueCallback = function (year) { | ||
|  |         return { | ||
|  |           year: year, | ||
|  |           isTwoDigitYear: token === 'YY' | ||
|  |         }; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         case 'Y': | ||
|  |           return parseNDigits(4, string, valueCallback); | ||
|  | 
 | ||
|  |         case 'Yo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'year', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string, valueCallback); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value.isTwoDigitYear || value.year > 0; | ||
|  |     }, | ||
|  |     set: function (date, flags, value, options) { | ||
|  |       var currentYear = (0, _index.default)(date, options); | ||
|  | 
 | ||
|  |       if (value.isTwoDigitYear) { | ||
|  |         var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); | ||
|  |         date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate); | ||
|  |         date.setUTCHours(0, 0, 0, 0); | ||
|  |         return (0, _index7.default)(date, options); | ||
|  |       } | ||
|  | 
 | ||
|  |       var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year; | ||
|  |       date.setUTCFullYear(year, 0, options.firstWeekContainsDate); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return (0, _index7.default)(date, options); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T'] | ||
|  |   }, | ||
|  |   // ISO week-numbering year
 | ||
|  |   R: { | ||
|  |     priority: 130, | ||
|  |     parse: function (string, token, _match, _options) { | ||
|  |       if (token === 'R') { | ||
|  |         return parseNDigitsSigned(4, string); | ||
|  |       } | ||
|  | 
 | ||
|  |       return parseNDigitsSigned(token.length, string); | ||
|  |     }, | ||
|  |     set: function (_date, _flags, value, _options) { | ||
|  |       var firstWeekOfYear = new Date(0); | ||
|  |       firstWeekOfYear.setUTCFullYear(value, 0, 4); | ||
|  |       firstWeekOfYear.setUTCHours(0, 0, 0, 0); | ||
|  |       return (0, _index6.default)(firstWeekOfYear); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Extended year
 | ||
|  |   u: { | ||
|  |     priority: 130, | ||
|  |     parse: function (string, token, _match, _options) { | ||
|  |       if (token === 'u') { | ||
|  |         return parseNDigitsSigned(4, string); | ||
|  |       } | ||
|  | 
 | ||
|  |       return parseNDigitsSigned(token.length, string); | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCFullYear(value, 0, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Quarter
 | ||
|  |   Q: { | ||
|  |     priority: 120, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         // 1, 2, 3, 4
 | ||
|  |         case 'Q': | ||
|  |         case 'QQ': | ||
|  |           // 01, 02, 03, 04
 | ||
|  |           return parseNDigits(token.length, string); | ||
|  |         // 1st, 2nd, 3rd, 4th
 | ||
|  | 
 | ||
|  |         case 'Qo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'quarter' | ||
|  |           }); | ||
|  |         // Q1, Q2, Q3, Q4
 | ||
|  | 
 | ||
|  |         case 'QQQ': | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // 1, 2, 3, 4 (narrow quarter; could be not numerical)
 | ||
|  | 
 | ||
|  |         case 'QQQQQ': | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // 1st quarter, 2nd quarter, ...
 | ||
|  | 
 | ||
|  |         case 'QQQQ': | ||
|  |         default: | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 4; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMonth((value - 1) * 3, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Stand-alone quarter
 | ||
|  |   q: { | ||
|  |     priority: 120, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         // 1, 2, 3, 4
 | ||
|  |         case 'q': | ||
|  |         case 'qq': | ||
|  |           // 01, 02, 03, 04
 | ||
|  |           return parseNDigits(token.length, string); | ||
|  |         // 1st, 2nd, 3rd, 4th
 | ||
|  | 
 | ||
|  |         case 'qo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'quarter' | ||
|  |           }); | ||
|  |         // Q1, Q2, Q3, Q4
 | ||
|  | 
 | ||
|  |         case 'qqq': | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // 1, 2, 3, 4 (narrow quarter; could be not numerical)
 | ||
|  | 
 | ||
|  |         case 'qqqqq': | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // 1st quarter, 2nd quarter, ...
 | ||
|  | 
 | ||
|  |         case 'qqqq': | ||
|  |         default: | ||
|  |           return match.quarter(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.quarter(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 4; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMonth((value - 1) * 3, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Month
 | ||
|  |   M: { | ||
|  |     priority: 110, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         return value - 1; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         // 1, 2, ..., 12
 | ||
|  |         case 'M': | ||
|  |           return parseNumericPattern(numericPatterns.month, string, valueCallback); | ||
|  |         // 01, 02, ..., 12
 | ||
|  | 
 | ||
|  |         case 'MM': | ||
|  |           return parseNDigits(2, string, valueCallback); | ||
|  |         // 1st, 2nd, ..., 12th
 | ||
|  | 
 | ||
|  |         case 'Mo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'month', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Jan, Feb, ..., Dec
 | ||
|  | 
 | ||
|  |         case 'MMM': | ||
|  |           return match.month(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // J, F, ..., D
 | ||
|  | 
 | ||
|  |         case 'MMMMM': | ||
|  |           return match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // January, February, ..., December
 | ||
|  | 
 | ||
|  |         case 'MMMM': | ||
|  |         default: | ||
|  |           return match.month(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 11; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMonth(value, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Stand-alone month
 | ||
|  |   L: { | ||
|  |     priority: 110, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         return value - 1; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         // 1, 2, ..., 12
 | ||
|  |         case 'L': | ||
|  |           return parseNumericPattern(numericPatterns.month, string, valueCallback); | ||
|  |         // 01, 02, ..., 12
 | ||
|  | 
 | ||
|  |         case 'LL': | ||
|  |           return parseNDigits(2, string, valueCallback); | ||
|  |         // 1st, 2nd, ..., 12th
 | ||
|  | 
 | ||
|  |         case 'Lo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'month', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Jan, Feb, ..., Dec
 | ||
|  | 
 | ||
|  |         case 'LLL': | ||
|  |           return match.month(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // J, F, ..., D
 | ||
|  | 
 | ||
|  |         case 'LLLLL': | ||
|  |           return match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // January, February, ..., December
 | ||
|  | 
 | ||
|  |         case 'LLLL': | ||
|  |         default: | ||
|  |           return match.month(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.month(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 11; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMonth(value, 1); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Local week of year
 | ||
|  |   w: { | ||
|  |     priority: 100, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'w': | ||
|  |           return parseNumericPattern(numericPatterns.week, string); | ||
|  | 
 | ||
|  |         case 'wo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'week' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 53; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       return (0, _index7.default)((0, _index5.default)(date, value, options), options); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T'] | ||
|  |   }, | ||
|  |   // ISO week of year
 | ||
|  |   I: { | ||
|  |     priority: 100, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'I': | ||
|  |           return parseNumericPattern(numericPatterns.week, string); | ||
|  | 
 | ||
|  |         case 'Io': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'week' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 53; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       return (0, _index6.default)((0, _index4.default)(date, value, options), options); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Day of the month
 | ||
|  |   d: { | ||
|  |     priority: 90, | ||
|  |     subPriority: 1, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'd': | ||
|  |           return parseNumericPattern(numericPatterns.date, string); | ||
|  | 
 | ||
|  |         case 'do': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'date' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (date, value, _options) { | ||
|  |       var year = date.getUTCFullYear(); | ||
|  |       var isLeapYear = isLeapYearIndex(year); | ||
|  |       var month = date.getUTCMonth(); | ||
|  | 
 | ||
|  |       if (isLeapYear) { | ||
|  |         return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]; | ||
|  |       } else { | ||
|  |         return value >= 1 && value <= DAYS_IN_MONTH[month]; | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCDate(value); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Day of year
 | ||
|  |   D: { | ||
|  |     priority: 90, | ||
|  |     subPriority: 1, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'D': | ||
|  |         case 'DD': | ||
|  |           return parseNumericPattern(numericPatterns.dayOfYear, string); | ||
|  | 
 | ||
|  |         case 'Do': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'date' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (date, value, _options) { | ||
|  |       var year = date.getUTCFullYear(); | ||
|  |       var isLeapYear = isLeapYearIndex(year); | ||
|  | 
 | ||
|  |       if (isLeapYear) { | ||
|  |         return value >= 1 && value <= 366; | ||
|  |       } else { | ||
|  |         return value >= 1 && value <= 365; | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMonth(0, value); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Day of week
 | ||
|  |   E: { | ||
|  |     priority: 90, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         // Tue
 | ||
|  |         case 'E': | ||
|  |         case 'EE': | ||
|  |         case 'EEE': | ||
|  |           return match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // T
 | ||
|  | 
 | ||
|  |         case 'EEEEE': | ||
|  |           return match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // Tu
 | ||
|  | 
 | ||
|  |         case 'EEEEEE': | ||
|  |           return match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // Tuesday
 | ||
|  | 
 | ||
|  |         case 'EEEE': | ||
|  |         default: | ||
|  |           return match.day(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 6; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       date = (0, _index2.default)(date, value, options); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Local day of week
 | ||
|  |   e: { | ||
|  |     priority: 90, | ||
|  |     parse: function (string, token, match, options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         var wholeWeekDays = Math.floor((value - 1) / 7) * 7; | ||
|  |         return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         // 3
 | ||
|  |         case 'e': | ||
|  |         case 'ee': | ||
|  |           // 03
 | ||
|  |           return parseNDigits(token.length, string, valueCallback); | ||
|  |         // 3rd
 | ||
|  | 
 | ||
|  |         case 'eo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'day', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Tue
 | ||
|  | 
 | ||
|  |         case 'eee': | ||
|  |           return match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // T
 | ||
|  | 
 | ||
|  |         case 'eeeee': | ||
|  |           return match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // Tu
 | ||
|  | 
 | ||
|  |         case 'eeeeee': | ||
|  |           return match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |         // Tuesday
 | ||
|  | 
 | ||
|  |         case 'eeee': | ||
|  |         default: | ||
|  |           return match.day(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 6; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       date = (0, _index2.default)(date, value, options); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // Stand-alone local day of week
 | ||
|  |   c: { | ||
|  |     priority: 90, | ||
|  |     parse: function (string, token, match, options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         var wholeWeekDays = Math.floor((value - 1) / 7) * 7; | ||
|  |         return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         // 3
 | ||
|  |         case 'c': | ||
|  |         case 'cc': | ||
|  |           // 03
 | ||
|  |           return parseNDigits(token.length, string, valueCallback); | ||
|  |         // 3rd
 | ||
|  | 
 | ||
|  |         case 'co': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'day', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Tue
 | ||
|  | 
 | ||
|  |         case 'ccc': | ||
|  |           return match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // T
 | ||
|  | 
 | ||
|  |         case 'ccccc': | ||
|  |           return match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // Tu
 | ||
|  | 
 | ||
|  |         case 'cccccc': | ||
|  |           return match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |         // Tuesday
 | ||
|  | 
 | ||
|  |         case 'cccc': | ||
|  |         default: | ||
|  |           return match.day(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'standalone' | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'standalone' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 6; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       date = (0, _index2.default)(date, value, options); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T'] | ||
|  |   }, | ||
|  |   // ISO day of week
 | ||
|  |   i: { | ||
|  |     priority: 90, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         if (value === 0) { | ||
|  |           return 7; | ||
|  |         } | ||
|  | 
 | ||
|  |         return value; | ||
|  |       }; | ||
|  | 
 | ||
|  |       switch (token) { | ||
|  |         // 2
 | ||
|  |         case 'i': | ||
|  |         case 'ii': | ||
|  |           // 02
 | ||
|  |           return parseNDigits(token.length, string); | ||
|  |         // 2nd
 | ||
|  | 
 | ||
|  |         case 'io': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'day' | ||
|  |           }); | ||
|  |         // Tue
 | ||
|  | 
 | ||
|  |         case 'iii': | ||
|  |           return match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // T
 | ||
|  | 
 | ||
|  |         case 'iiiii': | ||
|  |           return match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Tu
 | ||
|  | 
 | ||
|  |         case 'iiiiii': | ||
|  |           return match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |         // Tuesday
 | ||
|  | 
 | ||
|  |         case 'iiii': | ||
|  |         default: | ||
|  |           return match.day(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'short', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }) || match.day(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting', | ||
|  |             valueCallback: valueCallback | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 7; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, options) { | ||
|  |       date = (0, _index3.default)(date, value, options); | ||
|  |       date.setUTCHours(0, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T'] | ||
|  |   }, | ||
|  |   // AM or PM
 | ||
|  |   a: { | ||
|  |     priority: 80, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'a': | ||
|  |         case 'aa': | ||
|  |         case 'aaa': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'aaaaa': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'aaaa': | ||
|  |         default: | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['b', 'B', 'H', 'K', 'k', 't', 'T'] | ||
|  |   }, | ||
|  |   // AM, PM, midnight
 | ||
|  |   b: { | ||
|  |     priority: 80, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'b': | ||
|  |         case 'bb': | ||
|  |         case 'bbb': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'bbbbb': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'bbbb': | ||
|  |         default: | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['a', 'B', 'H', 'K', 'k', 't', 'T'] | ||
|  |   }, | ||
|  |   // in the morning, in the afternoon, in the evening, at night
 | ||
|  |   B: { | ||
|  |     priority: 80, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'B': | ||
|  |         case 'BB': | ||
|  |         case 'BBB': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'BBBBB': | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  | 
 | ||
|  |         case 'BBBB': | ||
|  |         default: | ||
|  |           return match.dayPeriod(string, { | ||
|  |             width: 'wide', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'abbreviated', | ||
|  |             context: 'formatting' | ||
|  |           }) || match.dayPeriod(string, { | ||
|  |             width: 'narrow', | ||
|  |             context: 'formatting' | ||
|  |           }); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['a', 'b', 't', 'T'] | ||
|  |   }, | ||
|  |   // Hour [1-12]
 | ||
|  |   h: { | ||
|  |     priority: 70, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'h': | ||
|  |           return parseNumericPattern(numericPatterns.hour12h, string); | ||
|  | 
 | ||
|  |         case 'ho': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'hour' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 12; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       var isPM = date.getUTCHours() >= 12; | ||
|  | 
 | ||
|  |       if (isPM && value < 12) { | ||
|  |         date.setUTCHours(value + 12, 0, 0, 0); | ||
|  |       } else if (!isPM && value === 12) { | ||
|  |         date.setUTCHours(0, 0, 0, 0); | ||
|  |       } else { | ||
|  |         date.setUTCHours(value, 0, 0, 0); | ||
|  |       } | ||
|  | 
 | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['H', 'K', 'k', 't', 'T'] | ||
|  |   }, | ||
|  |   // Hour [0-23]
 | ||
|  |   H: { | ||
|  |     priority: 70, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'H': | ||
|  |           return parseNumericPattern(numericPatterns.hour23h, string); | ||
|  | 
 | ||
|  |         case 'Ho': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'hour' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 23; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCHours(value, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T'] | ||
|  |   }, | ||
|  |   // Hour [0-11]
 | ||
|  |   K: { | ||
|  |     priority: 70, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'K': | ||
|  |           return parseNumericPattern(numericPatterns.hour11h, string); | ||
|  | 
 | ||
|  |         case 'Ko': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'hour' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 11; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       var isPM = date.getUTCHours() >= 12; | ||
|  | 
 | ||
|  |       if (isPM && value < 12) { | ||
|  |         date.setUTCHours(value + 12, 0, 0, 0); | ||
|  |       } else { | ||
|  |         date.setUTCHours(value, 0, 0, 0); | ||
|  |       } | ||
|  | 
 | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['a', 'b', 'h', 'H', 'k', 't', 'T'] | ||
|  |   }, | ||
|  |   // Hour [1-24]
 | ||
|  |   k: { | ||
|  |     priority: 70, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'k': | ||
|  |           return parseNumericPattern(numericPatterns.hour24h, string); | ||
|  | 
 | ||
|  |         case 'ko': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'hour' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 1 && value <= 24; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       var hours = value <= 24 ? value % 24 : value; | ||
|  |       date.setUTCHours(hours, 0, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T'] | ||
|  |   }, | ||
|  |   // Minute
 | ||
|  |   m: { | ||
|  |     priority: 60, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'm': | ||
|  |           return parseNumericPattern(numericPatterns.minute, string); | ||
|  | 
 | ||
|  |         case 'mo': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'minute' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 59; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMinutes(value, 0, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['t', 'T'] | ||
|  |   }, | ||
|  |   // Second
 | ||
|  |   s: { | ||
|  |     priority: 50, | ||
|  |     parse: function (string, token, match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 's': | ||
|  |           return parseNumericPattern(numericPatterns.second, string); | ||
|  | 
 | ||
|  |         case 'so': | ||
|  |           return match.ordinalNumber(string, { | ||
|  |             unit: 'second' | ||
|  |           }); | ||
|  | 
 | ||
|  |         default: | ||
|  |           return parseNDigits(token.length, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     validate: function (_date, value, _options) { | ||
|  |       return value >= 0 && value <= 59; | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCSeconds(value, 0); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['t', 'T'] | ||
|  |   }, | ||
|  |   // Fraction of second
 | ||
|  |   S: { | ||
|  |     priority: 30, | ||
|  |     parse: function (string, token, _match, _options) { | ||
|  |       var valueCallback = function (value) { | ||
|  |         return Math.floor(value * Math.pow(10, -token.length + 3)); | ||
|  |       }; | ||
|  | 
 | ||
|  |       return parseNDigits(token.length, string, valueCallback); | ||
|  |     }, | ||
|  |     set: function (date, _flags, value, _options) { | ||
|  |       date.setUTCMilliseconds(value); | ||
|  |       return date; | ||
|  |     }, | ||
|  |     incompatibleTokens: ['t', 'T'] | ||
|  |   }, | ||
|  |   // Timezone (ISO-8601. +00:00 is `'Z'`)
 | ||
|  |   X: { | ||
|  |     priority: 10, | ||
|  |     parse: function (string, token, _match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'X': | ||
|  |           return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string); | ||
|  | 
 | ||
|  |         case 'XX': | ||
|  |           return parseTimezonePattern(timezonePatterns.basic, string); | ||
|  | 
 | ||
|  |         case 'XXXX': | ||
|  |           return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string); | ||
|  | 
 | ||
|  |         case 'XXXXX': | ||
|  |           return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string); | ||
|  | 
 | ||
|  |         case 'XXX': | ||
|  |         default: | ||
|  |           return parseTimezonePattern(timezonePatterns.extended, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, flags, value, _options) { | ||
|  |       if (flags.timestampIsSet) { | ||
|  |         return date; | ||
|  |       } | ||
|  | 
 | ||
|  |       return new Date(date.getTime() - value); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['t', 'T', 'x'] | ||
|  |   }, | ||
|  |   // Timezone (ISO-8601)
 | ||
|  |   x: { | ||
|  |     priority: 10, | ||
|  |     parse: function (string, token, _match, _options) { | ||
|  |       switch (token) { | ||
|  |         case 'x': | ||
|  |           return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string); | ||
|  | 
 | ||
|  |         case 'xx': | ||
|  |           return parseTimezonePattern(timezonePatterns.basic, string); | ||
|  | 
 | ||
|  |         case 'xxxx': | ||
|  |           return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string); | ||
|  | 
 | ||
|  |         case 'xxxxx': | ||
|  |           return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string); | ||
|  | 
 | ||
|  |         case 'xxx': | ||
|  |         default: | ||
|  |           return parseTimezonePattern(timezonePatterns.extended, string); | ||
|  |       } | ||
|  |     }, | ||
|  |     set: function (date, flags, value, _options) { | ||
|  |       if (flags.timestampIsSet) { | ||
|  |         return date; | ||
|  |       } | ||
|  | 
 | ||
|  |       return new Date(date.getTime() - value); | ||
|  |     }, | ||
|  |     incompatibleTokens: ['t', 'T', 'X'] | ||
|  |   }, | ||
|  |   // Seconds timestamp
 | ||
|  |   t: { | ||
|  |     priority: 40, | ||
|  |     parse: function (string, _token, _match, _options) { | ||
|  |       return parseAnyDigitsSigned(string); | ||
|  |     }, | ||
|  |     set: function (_date, _flags, value, _options) { | ||
|  |       return [new Date(value * 1000), { | ||
|  |         timestampIsSet: true | ||
|  |       }]; | ||
|  |     }, | ||
|  |     incompatibleTokens: '*' | ||
|  |   }, | ||
|  |   // Milliseconds timestamp
 | ||
|  |   T: { | ||
|  |     priority: 20, | ||
|  |     parse: function (string, _token, _match, _options) { | ||
|  |       return parseAnyDigitsSigned(string); | ||
|  |     }, | ||
|  |     set: function (_date, _flags, value, _options) { | ||
|  |       return [new Date(value), { | ||
|  |         timestampIsSet: true | ||
|  |       }]; | ||
|  |     }, | ||
|  |     incompatibleTokens: '*' | ||
|  |   } | ||
|  | }; | ||
|  | var _default = parsers; | ||
|  | exports.default = _default; | ||
|  | module.exports = exports.default; |