UNPKG

just-validate-plugin-date

Version:
1,601 lines 71.9 kB
var formatDistanceLocale = { lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, xSeconds: { one: "1 second", other: "{{count}} seconds" }, halfAMinute: "half a minute", lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, xMinutes: { one: "1 minute", other: "{{count}} minutes" }, aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, xHours: { one: "1 hour", other: "{{count}} hours" }, xDays: { one: "1 day", other: "{{count}} days" }, aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, xWeeks: { one: "1 week", other: "{{count}} weeks" }, aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, xMonths: { one: "1 month", other: "{{count}} months" }, aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, xYears: { one: "1 year", other: "{{count}} years" }, overXYears: { one: "over 1 year", other: "over {{count}} years" }, almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } }; var formatDistance = function(token, count, options) { var result; var tokenValue = formatDistanceLocale[token]; if (typeof tokenValue === "string") { result = tokenValue; } else if (count === 1) { result = tokenValue.one; } else { result = tokenValue.other.replace("{{count}}", count.toString()); } if (options !== null && options !== void 0 && options.addSuffix) { if (options.comparison && options.comparison > 0) { return "in " + result; } else { return result + " ago"; } } return result; }; var formatDistance$1 = formatDistance; function buildFormatLongFn(args) { return function() { var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; var width = options.width ? String(options.width) : args.defaultWidth; var format = args.formats[width] || args.formats[args.defaultWidth]; return format; }; } var dateFormats = { full: "EEEE, MMMM do, y", long: "MMMM do, y", medium: "MMM d, y", short: "MM/dd/yyyy" }; var timeFormats = { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }; var dateTimeFormats = { full: "{{date}} 'at' {{time}}", long: "{{date}} 'at' {{time}}", medium: "{{date}}, {{time}}", short: "{{date}}, {{time}}" }; var formatLong = { date: buildFormatLongFn({ formats: dateFormats, defaultWidth: "full" }), time: buildFormatLongFn({ formats: timeFormats, defaultWidth: "full" }), dateTime: buildFormatLongFn({ formats: dateTimeFormats, defaultWidth: "full" }) }; var formatLong$1 = formatLong; var formatRelativeLocale = { lastWeek: "'last' eeee 'at' p", yesterday: "'yesterday at' p", today: "'today at' p", tomorrow: "'tomorrow at' p", nextWeek: "eeee 'at' p", other: "P" }; var formatRelative = function(token, _date, _baseDate, _options) { return formatRelativeLocale[token]; }; var formatRelative$1 = formatRelative; function buildLocalizeFn(args) { return function(dirtyIndex, dirtyOptions) { var options = dirtyOptions || {}; var context = options.context ? String(options.context) : "standalone"; var valuesArray; if (context === "formatting" && args.formattingValues) { var defaultWidth = args.defaultFormattingWidth || args.defaultWidth; var width = options.width ? String(options.width) : defaultWidth; valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; } else { var _defaultWidth = args.defaultWidth; var _width = options.width ? String(options.width) : args.defaultWidth; valuesArray = args.values[_width] || args.values[_defaultWidth]; } var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; return valuesArray[index]; }; } var eraValues = { narrow: ["B", "A"], abbreviated: ["BC", "AD"], wide: ["Before Christ", "Anno Domini"] }; var quarterValues = { narrow: ["1", "2", "3", "4"], abbreviated: ["Q1", "Q2", "Q3", "Q4"], wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] }; var monthValues = { narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], abbreviated: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], wide: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] }; var dayValues = { narrow: ["S", "M", "T", "W", "T", "F", "S"], short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] }; var dayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "morning", afternoon: "afternoon", evening: "evening", night: "night" } }; var formattingDayPeriodValues = { narrow: { am: "a", pm: "p", midnight: "mi", noon: "n", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, abbreviated: { am: "AM", pm: "PM", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" }, wide: { am: "a.m.", pm: "p.m.", midnight: "midnight", noon: "noon", morning: "in the morning", afternoon: "in the afternoon", evening: "in the evening", night: "at night" } }; var ordinalNumber = function(dirtyNumber, _options) { var number = Number(dirtyNumber); var rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + "st"; case 2: return number + "nd"; case 3: return number + "rd"; } } return number + "th"; }; var localize = { ordinalNumber, era: buildLocalizeFn({ values: eraValues, defaultWidth: "wide" }), quarter: buildLocalizeFn({ values: quarterValues, defaultWidth: "wide", argumentCallback: function(quarter) { return quarter - 1; } }), month: buildLocalizeFn({ values: monthValues, defaultWidth: "wide" }), day: buildLocalizeFn({ values: dayValues, defaultWidth: "wide" }), dayPeriod: buildLocalizeFn({ values: dayPeriodValues, defaultWidth: "wide", formattingValues: formattingDayPeriodValues, defaultFormattingWidth: "wide" }) }; var localize$1 = localize; function buildMatchFn(args) { return function(string) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var width = options.width; var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; var matchResult = string.match(matchPattern); if (!matchResult) { return null; } var matchedString = matchResult[0]; var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function(pattern) { return pattern.test(matchedString); }) : findKey(parsePatterns, function(pattern) { return pattern.test(matchedString); }); var value; value = args.valueCallback ? args.valueCallback(key) : key; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value, rest }; }; } function findKey(object, predicate) { for (var key in object) { if (object.hasOwnProperty(key) && predicate(object[key])) { return key; } } return void 0; } function findIndex(array, predicate) { for (var key = 0; key < array.length; key++) { if (predicate(array[key])) { return key; } } return void 0; } function buildMatchPatternFn(args) { return function(string) { var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; var matchResult = string.match(args.matchPattern); if (!matchResult) return null; var matchedString = matchResult[0]; var parseResult = string.match(args.parsePattern); if (!parseResult) return null; var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; value = options.valueCallback ? options.valueCallback(value) : value; var rest = string.slice(matchedString.length); return { value, rest }; }; } var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; var parseOrdinalNumberPattern = /\d+/i; var matchEraPatterns = { narrow: /^(b|a)/i, abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, wide: /^(before christ|before common era|anno domini|common era)/i }; var parseEraPatterns = { any: [/^b/i, /^(a|c)/i] }; var matchQuarterPatterns = { narrow: /^[1234]/i, abbreviated: /^q[1234]/i, wide: /^[1234](th|st|nd|rd)? quarter/i }; var parseQuarterPatterns = { any: [/1/i, /2/i, /3/i, /4/i] }; var matchMonthPatterns = { narrow: /^[jfmasond]/i, abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i }; var parseMonthPatterns = { narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i], any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i] }; var matchDayPatterns = { narrow: /^[smtwf]/i, short: /^(su|mo|tu|we|th|fr|sa)/i, abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i }; var parseDayPatterns = { narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] }; var matchDayPeriodPatterns = { narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i }; var parseDayPeriodPatterns = { any: { am: /^a/i, pm: /^p/i, midnight: /^mi/i, noon: /^no/i, morning: /morning/i, afternoon: /afternoon/i, evening: /evening/i, night: /night/i } }; var match = { ordinalNumber: buildMatchPatternFn({ matchPattern: matchOrdinalNumberPattern, parsePattern: parseOrdinalNumberPattern, valueCallback: function(value) { return parseInt(value, 10); } }), era: buildMatchFn({ matchPatterns: matchEraPatterns, defaultMatchWidth: "wide", parsePatterns: parseEraPatterns, defaultParseWidth: "any" }), quarter: buildMatchFn({ matchPatterns: matchQuarterPatterns, defaultMatchWidth: "wide", parsePatterns: parseQuarterPatterns, defaultParseWidth: "any", valueCallback: function(index) { return index + 1; } }), month: buildMatchFn({ matchPatterns: matchMonthPatterns, defaultMatchWidth: "wide", parsePatterns: parseMonthPatterns, defaultParseWidth: "any" }), day: buildMatchFn({ matchPatterns: matchDayPatterns, defaultMatchWidth: "wide", parsePatterns: parseDayPatterns, defaultParseWidth: "any" }), dayPeriod: buildMatchFn({ matchPatterns: matchDayPeriodPatterns, defaultMatchWidth: "any", parsePatterns: parseDayPeriodPatterns, defaultParseWidth: "any" }) }; var match$1 = match; var locale = { code: "en-US", formatDistance: formatDistance$1, formatLong: formatLong$1, formatRelative: formatRelative$1, localize: localize$1, match: match$1, options: { weekStartsOn: 0, firstWeekContainsDate: 1 } }; var defaultLocale = locale; function toInteger(dirtyNumber) { if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) { return NaN; } var number = Number(dirtyNumber); if (isNaN(number)) { return number; } return number < 0 ? Math.ceil(number) : Math.floor(number); } function requiredArgs(required, args) { if (args.length < required) { throw new TypeError(required + " argument" + (required > 1 ? "s" : "") + " required, but only " + args.length + " present"); } } function toDate(argument) { requiredArgs(1, arguments); var argStr = Object.prototype.toString.call(argument); if (argument instanceof Date || typeof argument === "object" && argStr === "[object Date]") { return new Date(argument.getTime()); } else if (typeof argument === "number" || argStr === "[object Number]") { return new Date(argument); } else { if ((typeof argument === "string" || argStr === "[object String]") && typeof console !== "undefined") { console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"); console.warn(new Error().stack); } return new Date(NaN); } } function addMilliseconds(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var timestamp = toDate(dirtyDate).getTime(); var amount = toInteger(dirtyAmount); return new Date(timestamp + amount); } function subMilliseconds(dirtyDate, dirtyAmount) { requiredArgs(2, arguments); var amount = toInteger(dirtyAmount); return addMilliseconds(dirtyDate, -amount); } function assign(target, dirtyObject) { if (target == null) { throw new TypeError("assign requires that input parameter not be null or undefined"); } dirtyObject = dirtyObject || {}; for (var property in dirtyObject) { if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) { target[property] = dirtyObject[property]; } } return target; } function dateLongFormatter(pattern, formatLong2) { switch (pattern) { case "P": return formatLong2.date({ width: "short" }); case "PP": return formatLong2.date({ width: "medium" }); case "PPP": return formatLong2.date({ width: "long" }); case "PPPP": default: return formatLong2.date({ width: "full" }); } } function timeLongFormatter(pattern, formatLong2) { switch (pattern) { case "p": return formatLong2.time({ width: "short" }); case "pp": return formatLong2.time({ width: "medium" }); case "ppp": return formatLong2.time({ width: "long" }); case "pppp": default: return formatLong2.time({ width: "full" }); } } function dateTimeLongFormatter(pattern, formatLong2) { var matchResult = pattern.match(/(P+)(p+)?/) || []; var datePattern = matchResult[1]; var timePattern = matchResult[2]; if (!timePattern) { return dateLongFormatter(pattern, formatLong2); } var dateTimeFormat; switch (datePattern) { case "P": dateTimeFormat = formatLong2.dateTime({ width: "short" }); break; case "PP": dateTimeFormat = formatLong2.dateTime({ width: "medium" }); break; case "PPP": dateTimeFormat = formatLong2.dateTime({ width: "long" }); break; case "PPPP": default: dateTimeFormat = formatLong2.dateTime({ width: "full" }); break; } return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); } var longFormatters = { p: timeLongFormatter, P: dateTimeLongFormatter }; var longFormatters$1 = longFormatters; function getTimezoneOffsetInMilliseconds(date) { var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())); utcDate.setUTCFullYear(date.getFullYear()); return date.getTime() - utcDate.getTime(); } var protectedDayOfYearTokens = ["D", "DD"]; var protectedWeekYearTokens = ["YY", "YYYY"]; function isProtectedDayOfYearToken(token) { return protectedDayOfYearTokens.indexOf(token) !== -1; } function isProtectedWeekYearToken(token) { return protectedWeekYearTokens.indexOf(token) !== -1; } function throwProtectedError(token, format, input) { if (token === "YYYY") { throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr")); } else if (token === "YY") { throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://git.io/fxCyr")); } else if (token === "D") { throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr")); } else if (token === "DD") { throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://git.io/fxCyr")); } } function startOfUTCWeek(dirtyDate, dirtyOptions) { requiredArgs(1, arguments); var options = dirtyOptions || {}; var locale2 = options.locale; var localeWeekStartsOn = locale2 && locale2.options && locale2.options.weekStartsOn; var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } function getUTCWeekYear(dirtyDate, dirtyOptions) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var options = dirtyOptions || {}; var locale2 = options.locale; var localeFirstWeekContainsDate = locale2 && locale2.options && locale2.options.firstWeekContainsDate; var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) { throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); } var firstWeekOfNextYear = new Date(0); firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate); firstWeekOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions); var firstWeekOfThisYear = new Date(0); firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeekOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) { requiredArgs(2, arguments); var options = dirtyOptions || {}; var locale2 = options.locale; var localeWeekStartsOn = locale2 && locale2.options && locale2.options.weekStartsOn; var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn); var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) { throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); } var date = toDate(dirtyDate); var day = toInteger(dirtyDay); var currentDay = date.getUTCDay(); var remainder = day % 7; var dayIndex = (remainder + 7) % 7; var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; date.setUTCDate(date.getUTCDate() + diff); return date; } function setUTCISODay(dirtyDate, dirtyDay) { requiredArgs(2, arguments); var day = toInteger(dirtyDay); if (day % 7 === 0) { day = day - 7; } var weekStartsOn = 1; var date = toDate(dirtyDate); var currentDay = date.getUTCDay(); var remainder = day % 7; var dayIndex = (remainder + 7) % 7; var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay; date.setUTCDate(date.getUTCDate() + diff); return date; } function startOfUTCISOWeek(dirtyDate) { requiredArgs(1, arguments); var weekStartsOn = 1; var date = toDate(dirtyDate); var day = date.getUTCDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setUTCDate(date.getUTCDate() - diff); date.setUTCHours(0, 0, 0, 0); return date; } function getUTCISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var year = date.getUTCFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0); var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0); var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } function startOfUTCISOWeekYear(dirtyDate) { requiredArgs(1, arguments); var year = getUTCISOWeekYear(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setUTCFullYear(year, 0, 4); fourthOfJanuary.setUTCHours(0, 0, 0, 0); var date = startOfUTCISOWeek(fourthOfJanuary); return date; } var MILLISECONDS_IN_WEEK$1 = 6048e5; function getUTCISOWeek(dirtyDate) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK$1) + 1; } function setUTCISOWeek(dirtyDate, dirtyISOWeek) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var isoWeek = toInteger(dirtyISOWeek); var diff = getUTCISOWeek(date) - isoWeek; date.setUTCDate(date.getUTCDate() - diff * 7); return date; } function startOfUTCWeekYear(dirtyDate, dirtyOptions) { requiredArgs(1, arguments); var options = dirtyOptions || {}; var locale2 = options.locale; var localeFirstWeekContainsDate = locale2 && locale2.options && locale2.options.firstWeekContainsDate; var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate); var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); var year = getUTCWeekYear(dirtyDate, dirtyOptions); var firstWeek = new Date(0); firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate); firstWeek.setUTCHours(0, 0, 0, 0); var date = startOfUTCWeek(firstWeek, dirtyOptions); return date; } var MILLISECONDS_IN_WEEK = 6048e5; function getUTCWeek(dirtyDate, options) { requiredArgs(1, arguments); var date = toDate(dirtyDate); var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; } function setUTCWeek(dirtyDate, dirtyWeek, options) { requiredArgs(2, arguments); var date = toDate(dirtyDate); var week = toInteger(dirtyWeek); var diff = getUTCWeek(date, options) - week; date.setUTCDate(date.getUTCDate() - diff * 7); return date; } var MILLISECONDS_IN_HOUR = 36e5; var MILLISECONDS_IN_MINUTE = 6e4; var MILLISECONDS_IN_SECOND = 1e3; var numericPatterns = { month: /^(1[0-2]|0?\d)/, date: /^(3[0-1]|[0-2]?\d)/, dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, week: /^(5[0-3]|[0-4]?\d)/, hour23h: /^(2[0-3]|[0-1]?\d)/, hour24h: /^(2[0-4]|[0-1]?\d)/, hour11h: /^(1[0-1]|0?\d)/, hour12h: /^(1[0-2]|0?\d)/, minute: /^[0-5]?\d/, second: /^[0-5]?\d/, singleDigit: /^\d/, twoDigits: /^\d{1,2}/, threeDigits: /^\d{1,3}/, fourDigits: /^\d{1,4}/, anyDigitsSigned: /^-?\d+/, singleDigitSigned: /^-?\d/, twoDigitsSigned: /^-?\d{1,2}/, threeDigitsSigned: /^-?\d{1,3}/, fourDigitsSigned: /^-?\d{1,4}/ }; 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; } 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; 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]; function isLeapYearIndex(year) { return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; } var parsers = { G: { priority: 140, parse: function(string, token, match2, _options) { switch (token) { case "G": case "GG": case "GGG": return match2.era(string, { width: "abbreviated" }) || match2.era(string, { width: "narrow" }); case "GGGGG": return match2.era(string, { width: "narrow" }); case "GGGG": default: return match2.era(string, { width: "wide" }) || match2.era(string, { width: "abbreviated" }) || match2.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"] }, y: { priority: 130, parse: function(string, token, match2, _options) { var valueCallback = function(year) { return { year, isTwoDigitYear: token === "yy" }; }; switch (token) { case "y": return parseNDigits(4, string, valueCallback); case "yo": return match2.ordinalNumber(string, { unit: "year", 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"] }, Y: { priority: 130, parse: function(string, token, match2, _options) { var valueCallback = function(year) { return { year, isTwoDigitYear: token === "YY" }; }; switch (token) { case "Y": return parseNDigits(4, string, valueCallback); case "Yo": return match2.ordinalNumber(string, { unit: "year", 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 = getUTCWeekYear(date, options); if (value.isTwoDigitYear) { var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear); date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate); date.setUTCHours(0, 0, 0, 0); return startOfUTCWeek(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 startOfUTCWeek(date, options); }, incompatibleTokens: ["y", "R", "u", "Q", "q", "M", "L", "I", "d", "D", "i", "t", "T"] }, 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 startOfUTCISOWeek(firstWeekOfYear); }, incompatibleTokens: ["G", "y", "Y", "u", "Q", "q", "M", "L", "w", "d", "D", "e", "c", "t", "T"] }, 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"] }, Q: { priority: 120, parse: function(string, token, match2, _options) { switch (token) { case "Q": case "QQ": return parseNDigits(token.length, string); case "Qo": return match2.ordinalNumber(string, { unit: "quarter" }); case "QQQ": return match2.quarter(string, { width: "abbreviated", context: "formatting" }) || match2.quarter(string, { width: "narrow", context: "formatting" }); case "QQQQQ": return match2.quarter(string, { width: "narrow", context: "formatting" }); case "QQQQ": default: return match2.quarter(string, { width: "wide", context: "formatting" }) || match2.quarter(string, { width: "abbreviated", context: "formatting" }) || match2.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"] }, q: { priority: 120, parse: function(string, token, match2, _options) { switch (token) { case "q": case "qq": return parseNDigits(token.length, string); case "qo": return match2.ordinalNumber(string, { unit: "quarter" }); case "qqq": return match2.quarter(string, { width: "abbreviated", context: "standalone" }) || match2.quarter(string, { width: "narrow", context: "standalone" }); case "qqqqq": return match2.quarter(string, { width: "narrow", context: "standalone" }); case "qqqq": default: return match2.quarter(string, { width: "wide", context: "standalone" }) || match2.quarter(string, { width: "abbreviated", context: "standalone" }) || match2.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"] }, M: { priority: 110, parse: function(string, token, match2, _options) { var valueCallback = function(value) { return value - 1; }; switch (token) { case "M": return parseNumericPattern(numericPatterns.month, string, valueCallback); case "MM": return parseNDigits(2, string, valueCallback); case "Mo": return match2.ordinalNumber(string, { unit: "month", valueCallback }); case "MMM": return match2.month(string, { width: "abbreviated", context: "formatting" }) || match2.month(string, { width: "narrow", context: "formatting" }); case "MMMMM": return match2.month(string, { width: "narrow", context: "formatting" }); case "MMMM": default: return match2.month(string, { width: "wide", context: "formatting" }) || match2.month(string, { width: "abbreviated", context: "formatting" }) || match2.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"] }, L: { priority: 110, parse: function(string, token, match2, _options) { var valueCallback = function(value) { return value - 1; }; switch (token) { case "L": return parseNumericPattern(numericPatterns.month, string, valueCallback); case "LL": return parseNDigits(2, string, valueCallback); case "Lo": return match2.ordinalNumber(string, { unit: "month", valueCallback }); case "LLL": return match2.month(string, { width: "abbreviated", context: "standalone" }) || match2.month(string, { width: "narrow", context: "standalone" }); case "LLLLL": return match2.month(string, { width: "narrow", context: "standalone" }); case "LLLL": default: return match2.month(string, { width: "wide", context: "standalone" }) || match2.month(string, { width: "abbreviated", context: "standalone" }) || match2.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"] }, w: { priority: 100, parse: function(string, token, match2, _options) { switch (token) { case "w": return parseNumericPattern(numericPatterns.week, string); case "wo": return match2.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 startOfUTCWeek(setUTCWeek(date, value, options), options); }, incompatibleTokens: ["y", "R", "u", "q", "Q", "M", "L", "I", "d", "D", "i", "t", "T"] }, I: { priority: 100, parse: function(string, token, match2, _options) { switch (token) { case "I": return parseNumericPattern(numericPatterns.week, string); case "Io": return match2.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 startOfUTCISOWeek(setUTCISOWeek(date, value, options), options); }, incompatibleTokens: ["y", "Y", "u", "q", "Q", "M", "L", "w", "d", "D", "e", "c", "t", "T"] }, d: { priority: 90, subPriority: 1, parse: function(string, token, match2, _options) { switch (token) { case "d": return parseNumericPattern(numericPatterns.date, string); case "do": return match2.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"] }, D: { priority: 90, subPriority: 1, parse: function(string, token, match2, _options) { switch (token) { case "D": case "DD": return parseNumericPattern(numericPatterns.dayOfYear, string); case "Do": return match2.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"] }, E: { priority: 90, parse: function(string, token, match2, _options) { switch (token) { case "E": case "EE": case "EEE": return match2.day(string, { width: "abbreviated", context: "formatting" }) || match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); case "EEEEE": return match2.day(string, { width: "narrow", context: "formatting" }); case "EEEEEE": return match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); case "EEEE": default: return match2.day(string, { width: "wide", context: "formatting" }) || match2.day(string, { width: "abbreviated", context: "formatting" }) || match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); } }, validate: function(_date, value, _options) { return value >= 0 && value <= 6; }, set: function(date, _flags, value, options) { date = setUTCDay(date, value, options); date.setUTCHours(0, 0, 0, 0); return date; }, incompatibleTokens: ["D", "i", "e", "c", "t", "T"] }, e: { priority: 90, parse: function(string, token, match2, options) { var valueCallback = function(value) { var wholeWeekDays = Math.floor((value - 1) / 7) * 7; return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; }; switch (token) { case "e": case "ee": return parseNDigits(token.length, string, valueCallback); case "eo": return match2.ordinalNumber(string, { unit: "day", valueCallback }); case "eee": return match2.day(string, { width: "abbreviated", context: "formatting" }) || match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); case "eeeee": return match2.day(string, { width: "narrow", context: "formatting" }); case "eeeeee": return match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); case "eeee": default: return match2.day(string, { width: "wide", context: "formatting" }) || match2.day(string, { width: "abbreviated", context: "formatting" }) || match2.day(string, { width: "short", context: "formatting" }) || match2.day(string, { width: "narrow", context: "formatting" }); } }, validate: function(_date, value, _options) { return value >= 0 && value <= 6; }, set: function(date, _flags, value, options) { date = setUTCDay(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"] }, c: { priority: 90, parse: function(string, token, match2, options) { var valueCallback = function(value) { var wholeWeekDays = Math.floor((value - 1) / 7) * 7; return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; }; switch (token) { case "c": case "cc": return parseNDigits(token.length, string, valueCallback); case "co": return match2.ordinalNumber(string, { unit: "day", valueCallback }); case "ccc": return match2.day(string, { width: "abbreviated", context: "standalone" }) || match2.day(string, { width: "short", context: "standalone" }) || match2.day(string, { width: "narrow", context: "standalone" }); case "ccccc": return match2.day(string, { width: "narrow", context: "standalone" }); case "cccccc": return match2.day(string, { width: "short", context: "standalone" }) || match2.day(string, { width: "narrow", context: "standalone" }); case "cccc": default: return match2.day(string, { width: "wide", context: "standalone" }) || match2.day(string, { width: "abbreviated", context: "standalone" }) || match2.day(string, { width: "short", context: "standalone" }) || match2.day(string, { width: "narrow", context: "standalone" }); } }, validate: function(_date, value, _options) { return value >= 0 && value <= 6; }, set: function(date, _flags, value, options) { date = setUTCDay(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"] }, i: { priority: 90, parse: function(string, token, match2, _options) { var valueCallback = function(value) { if (value === 0) { return 7; } return value; }; switch (token) { case "i": case "ii": return parseNDigits(token.length, string); case "io": return match2.ordinalNumber(string, { unit: "day" }); case "iii": return match2.day(string, { width: "abbreviated", context: "formatting", valueCallback }) || match2.day(string, { width: "short", context: "formatting", valueCallback }) || match2.day(string, { width: "narrow", context: "formatting", valueCallback }); case "iiiii": return match2.day(string, { width: "narrow", context: "formatting", valueCallback }); case "iiiiii": return match2.day(string, { width: "short", context: "formatting", valueCallback }) || match2.day(string, { width: "narrow", context: "formatting", valueCallback }); case "iiii": default: return match2.day(string, { width: "wide", context: "formatting", valueCallback }) || match2.da