diff --git a/README.md b/README.md index ad7d921..3932025 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,14 @@ [![Language](https://badgen.net/static/language/TS?v=2.0.0)](https://github.com/search?q=repo:kensnyder/any-date-parser++language:TypeScript&type=code) [![Build Status](https://github.com/kensnyder/any-date-parser/actions/workflows/workflow.yml/badge.svg?v=2.0.0)](https://github.com/kensnyder/any-date-parser/actions) [![Code Coverage](https://codecov.io/gh/kensnyder/any-date-parser/branch/main/graph/badge.svg?v=2.0.0)](https://codecov.io/gh/kensnyder/any-date-parser) +![2000+ Tests](https://badgen.net/static/tests/2000+/green) [![Gzipped Size](https://badgen.net/bundlephobia/minzip/any-date-parser?label=minzipped&v=2.0.0)](https://bundlephobia.com/package/any-date-parser@2.0.0) [![Dependency details](https://badgen.net/bundlephobia/dependency-count/any-date-parser?v=2.0.0)](https://www.npmjs.com/package/any-date-parser?activeTab=dependencies) [![Tree shakeable](https://badgen.net/bundlephobia/tree-shaking/any-date-parser?v=2.0.0)](https://www.npmjs.com/package/any-date-parser) [![ISC License](https://badgen.net/github/license/kensnyder/any-date-parser?v=2.0.0)](https://opensource.org/licenses/ISC) -Parse a wide range of date formats including human-input dates. - -Supports Node and browsers. Uses `Intl` to provide parsing support for all -installed locales. +The most comprehensive and accurate date parser for Node and browsers. It uses +`Intl` to provide parsing support for all installed locales. ## Installation @@ -47,10 +46,8 @@ OR `MaybeValidDate` has an `invalid` property if invalid, and an `isValid()` function whether valid or not. If in v1 you simply checked for an `invalid` property, v2 will behave the same. -- If an input string does not match any known format, it will use the current - locale and `Intl.DateTimeFormat` to attempt a fuzzy match. This allows - matching on every locale, i.e. for every date format known to the JavaScript - engine. +- If an input string does not match any known format, it will attempt a fuzzy + match, looking for date parts individually. ## Motivation @@ -64,22 +61,7 @@ OR There are three ways to use any-date-parser: -1.) Use a new function directly on `Date`: - -- `Date.fromString(string, locale)` - Parses a string and returns a `Date` - object -- `Date.fromAny(any, locale)` - Return a `Date` object given a `Date`, `Number` - or string to parse - -Example: - -```ts -import 'any-date-parser'; -Date.fromString('2020-10-15'); -// same as new Date(2020, 9, 15, 0, 0, 0, 0) -``` - -2.) Use the parser object: +1.) Use the parser object: (Recommended) - `parser.fromString(string, locale)` - Parses a string and returns a `Date` object. It is the same function as in option 1. @@ -94,7 +76,7 @@ parser.fromString('2020-10-15'); // same as new Date(2020, 9, 15, 0, 0, 0, 0) ``` -3.) `parser` also has a function `parser.attempt(string, locale)` that +2.) `parser` also has a function `parser.attempt(string, locale)` that returns an object with one or more integer values for the following keys: year, month, day, hour, minute, second, millisecond, offset. _Note_ month is returned as a normal 1-based integer, not the 0-based integer the `Date()` constructor @@ -133,6 +115,21 @@ parser.attempt(''); */ ``` +3.) Use a new function directly on `Date`: + +- `Date.fromString(string, locale)` - Parses a string and returns a `Date` + object +- `Date.fromAny(any, locale)` - Return a `Date` object given a `Date`, `Number` + or string to parse + +Example: + +```ts +import 'any-date-parser'; +Date.fromString('2020-10-15'); +// same as new Date(2020, 9, 15, 0, 0, 0, 0) +``` + 4.) There are npm packages that integrate any-date-parser directly into popular date libraries: @@ -163,7 +160,7 @@ Summary: ## Locale Support -any-date-parser supports any locale that your runtime's +`any-date-parser` supports any locale that your runtime's [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat) supports. In browsers that usually means the operating system language. In Node, that means the compiled language or the icu modules included. For unit tests, @@ -202,7 +199,7 @@ Check out the ## Adding custom formats -any-date-parser has an `addFormat()` function to add a custom parser. +`any-date-parser` has an `addFormat()` function to add a custom parser. First, parsers must have `matcher` or `template`. @@ -241,9 +238,9 @@ import parser, { Format } from 'any-date-parser'; parser.addFormat( new Format({ - matcher: /^Q([1-4]) (\d{4})$/, // String such as "Q4 2004" + matcher: /^(Q[1-4]) (\d{4})$/, // String such as "Q4 2004" handler: function ([, quarter, year]) { - const monthByQuarter = { 1: 1, 2: 4, 3: 7, 4: 10 }; + const monthByQuarter = { Q1: 1, Q2: 4, Q3: 7, Q4: 10 }; const month = monthByQuarter[quarter]; return { year, month }; }, @@ -271,9 +268,9 @@ import parser, { Format } from 'any-date-parser'; parser.addFormat( new Format({ - template: '^Q([1-4]) (_YEAR_)$', // String such as "Q4 2004" + template: '^(Q[1-4]) (_YEAR_)$', // String such as "Q4 2004" handler: function ([, quarter, year]) { - const monthByQuarter = { 1: 1, 2: 4, 3: 7, 4: 10 }; + const monthByQuarter = { Q1: 1, Q2: 4, Q3: 7, Q4: 10 }; const month = monthByQuarter[quarter]; return { year, month }; }, @@ -293,7 +290,7 @@ parser.removeFormat(dayMonth); parser.removeFormat(fuzzy); ``` -All formats names: +All exported formats: - `time24Hours` - `time12Hours` @@ -330,6 +327,8 @@ const myParser = new Parser(); myParser.addFormats([time24Hours, yearMonthDay, ago]); ``` +Note that formats will be attempted in the order they were added. + You can convert your custom parser to a function. For example: ```ts @@ -344,12 +343,12 @@ Date.fromAny = myParser.exportAsFunctionAny(); ## Unit tests -`any-date-parser` has 100% code coverage. +You can git checkout `any-date-parser` and run its tests. - To run tests, run `npm test` - To check coverage, run `npm run coverage` -- _Note_ - `npm test` will attempt to install full-icu and luxon globally if not - present +- _Note_ - `npm test` will attempt to install `full-icu` and `luxon` globally if + not present ## Contributing diff --git a/package.json b/package.json index 29920c1..345afe6 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "demo": "npm run build && npx serve -p 5050 .", "test": "./scripts/test.sh run", "test-watch": "./scripts/test.sh", - "test-fuzzy": "bun ./test-fixtures/are-we-fuzzy-yet.ts", + "are-we-fuzzy-yet": "TZ=UTC bun ./test-fixtures/are-we-fuzzy-yet.ts", "build": "npm run build:clean && npm run build:dts && npm run build:esm && npm run build:cjs", "build:clean": "rimraf dist/ && mkdir dist", "build:dts": "yes | npx dts-bundle-generator -o dist/index.d.ts src/main.ts", diff --git a/src/Format/Format.ts b/src/Format/Format.ts index a0d3f26..4858aac 100644 --- a/src/Format/Format.ts +++ b/src/Format/Format.ts @@ -86,10 +86,10 @@ export default class Format { /** * Build the RegExp from the template for a given locale - * @param {String} locale The language locale such as en-US, pt-BR, zh, es, etc. - * @returns {RegExp} A RegExp that matches when this format is recognized + * @param locale The language locale such as en-US, pt-BR, zh, es, etc. + * @returns A RegExp that matches when this format is recognized */ - getRegExp(locale = defaultLocale) { + getRegExp(locale = defaultLocale): RegExp { if (this.template) { if (!this.regexByLocale[locale]) { this.regexByLocale[locale] = LocaleHelper.factory(locale).compile( @@ -97,9 +97,9 @@ export default class Format { ); //console.log([locale, this.regexByLocale[locale]]); } - // if (locale.slice(0, 2) === 'zh') { - // console.log(this.template, this.regexByLocale[locale]); - // } + if (locale.slice(0, 2) === 'zh') { + console.log(this.template, this.regexByLocale[locale]); + } return this.regexByLocale[locale]; } return this.matcher; @@ -140,8 +140,11 @@ export default class Format { * @returns {Object|null} Null if format can't handle this string, Object for result or error */ attempt(strDate: string, locale = defaultLocale): HandlerResult { - strDate = runPreprocessors(String(strDate), locale).trim(); - const matches = this.getMatches(strDate, locale); + const processedDate = runPreprocessors(String(strDate), locale).trim(); + if (strDate === '2021年10月15日 下午6:34:56 [UTC]') { + console.log('processedDate------------', processedDate); + } + const matches = this.getMatches(processedDate, locale); if (matches) { const dt = this.toDateTime(matches, locale); return dt || null; diff --git a/src/LocaleHelper/LocaleHelper.ts b/src/LocaleHelper/LocaleHelper.ts index b6e6d32..061887b 100644 --- a/src/LocaleHelper/LocaleHelper.ts +++ b/src/LocaleHelper/LocaleHelper.ts @@ -81,6 +81,21 @@ export default class LocaleHelper { return parseInt(latnDigitString, 10); } + monthNameToInt(monthName: string) { + const lower = monthName.toLocaleLowerCase(this.locale).replace(/\.$/, ''); + return this.lookups.month[lower] || 12; + } + h12ToInt(digitString: string | number, ampm: string) { + const meridiemOffset = this.lookups.meridiem[ampm?.toLowerCase()] || 0; + let hourInt = this.toInt(digitString); + if (hourInt < 12 && meridiemOffset === 12) { + hourInt += 12; + } + return hourInt; + } + zoneToOffset(zoneName: string) { + return this.lookups.zone[zoneName]; + } /** * Build lookups for digits, month names, day names, and meridiems based on the locale */ @@ -91,9 +106,11 @@ export default class LocaleHelper { if (!/^en/i.test(this.locale)) { this.buildMonthNames(); this.buildDaynames(); - this.buildMeridiems(); + if (!/zh/i.test(this.locale)) { + this.buildMeridiems(); + } } - // if (this.locale === 'ar-SA') { + // if (this.locale === 'zh-TW') { // console.log('lookups=====>', this); // } } diff --git a/src/data/preprocessors.ts b/src/data/preprocessors.ts index e4ffcb5..8c33bef 100644 --- a/src/data/preprocessors.ts +++ b/src/data/preprocessors.ts @@ -6,28 +6,31 @@ const periodsInsteadOfColons = [ const preprocessors = { ar: [[/ /g, ' ']], // Some built-in formats contain non-breaking space + bn: [[/,/g, '']], zh: [ // in Chinese, am/pm comes before the digits [/早上\s*([\d:]+)/, '$1am'], + [/凌晨\s*([\d:]+)/, '$1am'], [/上午\s*([\d:]+)/, '$1am'], [/下午\s*([\d:]+)/, '$1pm'], + [/晚上\s*([\d:]+)/, '$1pm'], // Chinese "time" // [/\[.+?時間]/, ''], ], - // he: [[/ב/gi, '']], + he: [[/ב/gi, '']], // "of" in various languages - // de: [[/ um /g, '']], - // pt: [[/de /gi, '']], - // es: [[/de /gi, '']], - // da: [[/den /gi, '']], + de: [[/ um /g, '']], + pt: [[/de /gi, '']], + es: [[/de /gi, '']], + da: [[/den /gi, ''], ...periodsInsteadOfColons], // Russian symbol after years - // ru: [[/ г\./g, '']], + ru: [[/ г\./g, '']], th: [ // Thai "at/on" // [/ที่/gi, ''], [/\s*นาฬิกา\s*/i, ':'], // "hour" [/\s*นาที\s*/i, ':'], // "minute" - [/\s*วินาที\s*/i, ''], // "second" + [/\s*วินาที\s*/i, ' '], // "second" ], ko: [ [/\s*시\s*/, ':'], // "hour" @@ -38,7 +41,7 @@ const preprocessors = { ], fi: periodsInsteadOfColons, id: periodsInsteadOfColons, - da: periodsInsteadOfColons, + // da: periodsInsteadOfColons, }; export default preprocessors; diff --git a/src/data/timezoneNames.ts b/src/data/timezoneNames.ts index 70f730f..f701d92 100644 --- a/src/data/timezoneNames.ts +++ b/src/data/timezoneNames.ts @@ -187,7 +187,6 @@ const timezoneNames = { WST: 480, // Western Standard Time YAKT: 540, // Yakutsk Time YEKT: 300, // Yekaterinburg Time - Z: 0, // Zulu Time (Coordinated Universal Time) }; export default timezoneNames; diff --git a/src/formats/fuzzy/fuzzy.ts b/src/formats/fuzzy/fuzzy.ts index 34a1692..9cad4e9 100644 --- a/src/formats/fuzzy/fuzzy.ts +++ b/src/formats/fuzzy/fuzzy.ts @@ -3,166 +3,201 @@ import LocaleHelper from '../../LocaleHelper/LocaleHelper'; const extractorsByLocale = {}; +export function full24Extractor(helper: LocaleHelper) { + return { + regex: helper.compile( + '(?:^|[\\sT])(_H24_):(_MIN_):(_SEC_)(?:\\.(_MS_))?(Z)?$' + ), + matches: ['', 'hour', 'minute', 'second', 'millisecond', 'zone'], + replaceWith: '', + }; +} + +export function zone24Extractor(helper: LocaleHelper) { + return { + regex: helper.compile( + '(_H24_):(_MIN_):(_SEC_)(?:\\.(_MS_))?[\\s\\[(]*(_ZONE_)?[\\s\\])]*$' + ), + matches: ['', 'hour', 'minute', 'second', 'millisecond', 'zone'], + replaceWith: '', + }; +} + +export function hms24Extractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_H24_):(_MIN_):(_SEC_)(?:\\.(_MS_))?'), + matches: ['', 'hour', 'minute', 'second', 'millisecond'], + replaceWith: '', + }; +} + +export function hms12Extractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_H12_):(_MIN_):(_SEC_)\\s*(_MERIDIEM_)'), + matches: ['', 'hour', 'minute', 'second', 'meridiem'], + replaceWith: '', + }; +} + +export function hm24Extractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_H24_):(_MIN_)'), + matches: ['', 'hour', 'minute'], + replaceWith: '', + }; +} + +export function hm12Extractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_H12_):(_MIN_)\\s*(_MERIDIEM_)'), + matches: ['', 'hour', 'minute', 'meridiem'], + replaceWith: '', + }; +} + +export function h12Extractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_H12_)\\s*(_MERIDIEM_)'), + matches: ['', 'hour', 'meridiem'], + replaceWith: '', + }; +} + +export function onlyZoneExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_ZONE_)'), + matches: ['zone'], + replaceWith: '', + }; +} + +export function yearExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_YEAR4_)\\b'), + matches: ['', 'year'], + replaceWith: '', + }; +} + +export function monthnameDayExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_MONTHNAME_)[\\s.]*(_DAY_)\\b'), + matches: ['', 'monthname', 'day'], + replaceWith: '', + }; +} + +export function dayMonthnameExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_DAY_)[\\s.]*(_MONTHNAME_)\\b'), + matches: ['', 'day', 'monthname'], + replaceWith: '', + }; +} + +export function hmsNoMeridiemExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_H12_|_H24_)[:.](_MIN_)[:.](_SEC_)\\b'), + matches: ['', 'hour', 'minute', 'second'], + replaceWith: '', + }; +} + +export function hmNoMeridiemExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_H12_|_H24_)[:.](_MIN_)\\b'), + matches: ['', 'hour', 'minute'], + replaceWith: '', + }; +} + +export function dmyExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_DAY_)[./\\s-]+(_MONTH_)[./\\s-]+(_YEAR4_)\\b'), + matches: ['', 'day', 'month', 'year'], + replaceWith: '', + }; +} + +export function ymdExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('\\b(_YEAR4_)[./\\s-]+(_MONTH_)[./\\s-]+(_DAY_)\\b'), + matches: ['', 'year', 'month', 'day'], + replaceWith: '', + }; +} + +export function yearLooseExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_YEAR4_)'), + matches: ['', 'year'], + replaceWith: '', + }; +} + +export function dayMonthnameLooseExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_DAY_)[\\s.]*(_MONTHNAME_)'), + matches: ['', 'day', 'monthname'], + replaceWith: '', + }; +} + +export function monthnameDayLooseExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_MONTHNAME_)[\\s.]*(_DAY_)'), + matches: ['', 'monthname', 'day'], + replaceWith: '', + }; +} + +export function monthnameExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_MONTHNAME_)'), + matches: ['', 'monthname'], + replaceWith: '', + }; +} + +export function dayExtractor(helper: LocaleHelper) { + return { + regex: helper.compile('(_DAY_)'), + matches: ['', 'day'], + replaceWith: '', + }; +} + export function getExtractors(locale: string) { if (!extractorsByLocale[locale]) { const helper = LocaleHelper.factory(locale); + // if (locale === 'bn-IN') { + // console.log(helper.lookups.month, helper.vars); + // } extractorsByLocale[locale] = [ - { - name: 'zonename', - regex: helper.compile('\\b(_ZONE_)\\b'), - handler: ([zoneName]) => { - const offset = helper.lookups.zone[zoneName]; - if (!offset) { - return null; - } - return { offset }; - }, - }, - { - // time12 must come before time24 because it has MERIDIEM text - name: 'time12', - regex: helper.compile( - '(_H12_)(?::(_MIN_))?(?::(_SEC_))?\\s*(_MERIDIEM_)' - ), - handler: ([, hour, min, second, ampm]) => { - const meridiemOffset = - helper.lookups.meridiem[ampm?.toLowerCase()] || 0; - let hourInt = helper.toInt(hour); - if (hourInt < 12 && meridiemOffset === 12) { - hourInt += 12; - } - return { - hour: hourInt, - minute: min ? helper.toInt(min) : 0, - second: second ? helper.toInt(second) : 0, - }; - }, - }, - { - name: 'time24', - regex: helper.compile('(_H24_):(_MIN_)(?::(_SEC_))?(?:\\.(_MS_))?'), - handler: ([, hour, min, seconds, ms]) => { - const result: { - hour: number; - minute: number; - second?: number; - millisecond?: number; - } = { - hour: helper.toInt(hour), - minute: helper.toInt(min), - }; - if (seconds) { - result.second = helper.toInt(seconds); - } - if (ms) { - result.millisecond = helper.toInt(ms); - } - return result; - }, - }, - { - name: 'time12noMeridiem', - regex: helper.compile('(_H12_):(_MIN_)(?::(_SEC_))?'), - handler: ([, hour, min, second]) => { - return { - hour: helper.toInt(hour), - minute: min ? helper.toInt(min) : 0, - second: second ? helper.toInt(second) : 0, - }; - }, - }, - { - name: 'monthname', - regex: helper.compile('\\b(_MONTHNAME_)\\b'), - handler: ([, monthName]) => { - const lower = monthName.toLocaleLowerCase(locale).replace(/\.$/, ''); - const monthNumber = helper.lookups.month[lower]; - return { month: monthNumber }; - }, - }, - { - name: 'year4', - regex: helper.compile('(_YEAR4_)'), - handler: ([, yearNumber]) => { - return { year: helper.toInt(yearNumber) }; - }, - }, - { - // offset must come after times and years to avoid confusion - name: 'offset', - regex: helper.compile('\\b(_OFFSET_)\\b'), - handler: ([offsetString]) => { - return { offset: helper.offsetToMinutes(offsetString) }; - }, - }, - { - name: 'monthDay', - regex: helper.compile('(?:^|\\D)(_MONTH_)\\D+(_DAY_)(?:$|\\D)'), - handler: ([, month, day], current) => { - if (current.month > 0) { - return null; - } - return { day: helper.toInt(day), month: helper.toInt(month) }; - }, - }, - { - name: 'dayMonth', - regex: helper.compile('(?:^|\\D)(_DAY_)\\D+(_MONTH_)(?:$|\\D)'), - handler: ([, day, month], current) => { - if (current.month > 0) { - return null; - } - return { day: helper.toInt(day), month: helper.toInt(month) }; - }, - }, - { - name: 'daynumber', - // allow trailing non-number to allow ordinal suffixes - regex: helper.compile('(?:^|\\D)(_DAY_)(?:$|\\D)'), - handler: ([, dayNumber]) => { - return { day: helper.toInt(dayNumber) }; - }, - }, - { - name: 'unboundMonthname', - regex: helper.compile('(_MONTHNAME_)'), - handler: ([, monthName], current) => { - if (current.month > 0) { - return null; - } - const lower = monthName.toLocaleLowerCase(locale).replace(/\.$/, ''); - const monthNumber = helper.lookups.month[lower]; - return { month: monthNumber }; - }, - }, - // { - // name: 'unboundMonthname', - // regex: /^.{2,}$/, - // handler: ([rest], current) => { - // if (current.month > 0) { - // return null; - // } - // for (const [name, month] of Object.entries(helper.lookups.month)) { - // if (rest.includes(name)) { - // return { month }; - // } - // } - // return null; - // }, - // }, - // { - // name: 'monthnumber', - // regex: helper.compile('\\b(_MONTH_)\\b'), - // handler: ([monthNumber], alreadyFound) => { - // if (alreadyFound.month === undefined) { - // return { month: helper.toInt(monthNumber) }; - // } - // }, - // }, + full24Extractor(helper), + zone24Extractor(helper), + hms12Extractor(helper), + hms24Extractor(helper), + hmsNoMeridiemExtractor(helper), + hm12Extractor(helper), + hm24Extractor(helper), + hmNoMeridiemExtractor(helper), + h12Extractor(helper), + onlyZoneExtractor(helper), + yearExtractor(helper), + dayMonthnameExtractor(helper), + monthnameDayExtractor(helper), + dmyExtractor(helper), + ymdExtractor(helper), + yearLooseExtractor(helper), + dayMonthnameLooseExtractor(helper), + monthnameDayLooseExtractor(helper), + monthnameExtractor(helper), + dayExtractor(helper), ]; - // if (locale === 'es-ES') { - // console.log(extractorsByLocale[locale][1]); - // console.log(extractorsByLocale[locale][2]); + // if (locale === 'zh-TW') { + // console.log('))))))))))))))', extractorsByLocale[locale][1]); + // console.log('))))))))))))))', extractorsByLocale[locale][2]); // } // extractorsByLocale[locale].forEach(e => // console.log({ name: e.name, regex: e.regex }) @@ -171,49 +206,97 @@ export function getExtractors(locale: string) { return extractorsByLocale[locale]; } +type Extracted = { + year?: number; + month?: number; + day?: number; + hour?: number; + minute?: number; + second?: number; + millisecond?: number; + offset?: number; + monthname?: string; + meridiem?: string; +}; + const fuzzy = new Format({ matcher: /^.+$/, handler: function ([fullString], locale: string) { - let workingString = fullString; - const result: HandlerResult = {}; + if (locale === 'bn-IN') { + console.log('> ' + fullString); + } + const helper = LocaleHelper.factory(locale); + function isDone(res) { + return ( + 'year' in res && + 'month' in res && + 'day' in res && + 'hour' in res && + 'minute' in res && + 'second' in res && + 'millisecond' in res && + 'offset' in res + ); + } + function toResult(extracted: Extracted) { + const result: HandlerResult = {}; + for (const [name, value] of Object.entries(extracted)) { + if (name === 'monthname') { + result.month = helper.monthNameToInt(value as string); + } else if (name === 'hour' && extracted.meridiem) { + result.hour = helper.h12ToInt(value, extracted.meridiem); + } else if (name === 'zone') { + result.offset = helper.zoneToOffset(value as string); + } else if (name === 'offset') { + result.offset = helper.offsetToMinutes(value as string); + } else { + result[name] = helper.toInt(value); + } + } + return result; + } let hasMatch = false; + let workingString = fullString; + const extracted: Extracted = {}; for (const extractor of getExtractors(locale)) { - const match = workingString.match(extractor.regex); + if ( + locale === 'bn-IN' && + fullString === 'শুক্রবার ৩১ জানুয়ারী ২০২০ এ ১:৩১:২০ AM UTC' + ) { + console.log('---'); + console.log(extractor.regex); + console.log(workingString); + } + const match = fullString.match(extractor.regex); if (!match) { - // if (locale === 'ru-RU' && fullString === '31 января 2020 г.') { - // console.log({ - // workingString, - // name: extractor.name, - // regex: extractor.regex, - // result, - // }); - // } continue; } - const handled = extractor.handler(match, result); - if (typeof handled === 'object') { - Object.assign(result, handled); - workingString = workingString.replace(match[0], ''); - // if (fullString === 'In 1929, the stock market crashed on October 29') { - // console.log({ - // fullString, - // locale, - // workingString, - // name: extractor.name, - // regex: extractor.regex, - // result, - // match, - // handled, - // }); - // } - hasMatch = true; + for (let i = 0, len = match.length; i < len; i++) { + const part = match[i]; + const name = extractor.matches[i]; + if (name && part !== '' && part !== undefined && !(name in extracted)) { + extracted[name] = part; + hasMatch = true; + } + } + if (isDone(extracted)) { + return extracted; + } + if (extractor.replaceWith) { + workingString = workingString.replace( + extractor.regex, + extractor.replaceWith + ); + workingString = workingString.trim(); + } + if (workingString === '' /* || /\w/.test(workingString) === false*/) { + return extracted; } } if (!hasMatch) { return null; } - // if (locale === 'ar-SA') console.log('-----'); - return result; + return toResult(extracted); }, }); diff --git a/src/main.spec.ts b/src/main.spec.ts index d09e63c..7ec33c7 100644 --- a/src/main.spec.ts +++ b/src/main.spec.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest'; +import testBuiltInFormats from '../test-fixtures/testBuiltInFormats'; import parser, { ago, MaybeValidDate, Parser } from './main'; describe('Parser export', () => { @@ -68,3 +69,13 @@ describe('MaybeValidDate', () => { expect(res.isValid()).toBe(false); }); }); + +testBuiltInFormats(parser, new Date(2021, 0, 31, 1, 31, 21, 789), { + year: 2021, + month: 1, + day: 31, + hour: 1, + minute: 31, + second: 21, + millisecond: 789, +}); diff --git a/src/main.ts b/src/main.ts index 907b576..1dbc331 100644 --- a/src/main.ts +++ b/src/main.ts @@ -60,9 +60,14 @@ parser Date.fromString = MaybeValidDate.fromString = parser.fromString; // @ts-expect-error Yes, we are extending the global Date object Date.fromAny = MaybeValidDate.fromAny = parser.fromAny; -/* v8 ignore next 4 */ + +declare global { + interface Window { + anyDateParser: Parser; + } +} +/* v8 ignore next 3 */ if (typeof window !== 'undefined') { - // @ts-expect-error Yes, we are extending the global window object window.anyDateParser = parser; } diff --git a/test-fixtures/are-we-fuzzy-yet.ts b/test-fixtures/are-we-fuzzy-yet.ts index a600a82..c40ade6 100644 --- a/test-fixtures/are-we-fuzzy-yet.ts +++ b/test-fixtures/are-we-fuzzy-yet.ts @@ -1,5 +1,5 @@ import fs from 'node:fs'; -// import parser from '../src/main'; +//import parser from '../src/main'; import { Parser, fuzzy } from '../src/main'; import localeList from './localeList'; @@ -7,8 +7,6 @@ const parser = new Parser(); parser.addFormat(fuzzy); const date = new Date(2020, 0, 31, 1, 31, 20, 789); const results = [`Using date ${date.toJSON()}`]; -const today = toMDY(date); -console.log({ today }); const dateStyles = ['full', 'long', 'medium'] as const; let i = 0; let found = 0; @@ -18,8 +16,6 @@ for (const locale of localeList) { month: 1, day: 31, }; - // const fmt = new Intl.NumberFormat(locale); - // const numberSystem = fmt.resolvedOptions().numberingSystem; for (const dateStyle of dateStyles) { testIt(locale, { dateStyle }, ymd); testIt( @@ -96,18 +92,4 @@ function doesOverlap( return true; } -function toMDY(d: Date | { year: number; month: number; day: number }) { - if (d instanceof Date) { - return [d.getFullYear(), pad(d.getMonth() + 1), pad(d.getDate())].join('-'); - } - if (d.year < 100) { - d.year += 2000; - } - return [d.year, pad(d.month), pad(d.day)].join('-'); -} - -function pad(n: number) { - return (n > 9 ? '' : '0') + n; -} - console.log(`Parsed ${found}/${i} dates ok`); diff --git a/test-fixtures/dates.json b/test-fixtures/dates.json index 7084e96..764ea5d 100644 --- a/test-fixtures/dates.json +++ b/test-fixtures/dates.json @@ -1,627 +1,627 @@ [ "Using date 2020-01-31T01:31:20.789Z", "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-BD > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-BD > ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০, ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০, ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০, ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০, ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-BD > ৩১ জানু, ২০২০, ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-IN > শুক্রবার, ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ এ ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-IN > ৩১ জানুয়ারী, ২০২০ এ ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০ > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০, ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০, ১:৩১:২০ AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০, ১:৩১:২০ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০, ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > beng > gregory > bn-IN > ৩১ জানু, ২০২০, ১:৩১ AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 v 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 v 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 v 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 v 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > cs-CZ > pátek 31. ledna 2020 v 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > cs-CZ > 31. ledna 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > cs-CZ > 31. ledna 2020 v 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > cs-CZ > 31. ledna 2020 v 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > cs-CZ > 31. ledna 2020 v 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > cs-CZ > 31. ledna 2020 v 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > cs-CZ > 31. ledna 2020 v 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > cs-CZ > 31. 1. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > cs-CZ > 31. 1. 2020 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > cs-CZ > 31. 1. 2020 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > cs-CZ > 31. 1. 2020 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > cs-CZ > 31. 1. 2020 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > cs-CZ > 31. 1. 2020 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > da-DK > fredag den 31. januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > da-DK > fredag den 31. januar 2020 kl. 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > da-DK > fredag den 31. januar 2020 kl. 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > da-DK > fredag den 31. januar 2020 kl. 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > da-DK > fredag den 31. januar 2020 kl. 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > da-DK > 31. januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > da-DK > 31. januar 2020 kl. 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > da-DK > 31. januar 2020 kl. 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > da-DK > 31. januar 2020 kl. 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > da-DK > 31. januar 2020 kl. 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > da-DK > 31. jan. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > da-DK > 31. jan. 2020, 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > da-DK > 31. jan. 2020, 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > da-DK > 31. jan. 2020, 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > da-DK > 31. jan. 2020, 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-AT > Freitag, 31. Jänner 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-AT > Freitag, 31. Jänner 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-AT > Freitag, 31. Jänner 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-AT > Freitag, 31. Jänner 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-AT > Freitag, 31. Jänner 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-AT > 31. Jänner 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-AT > 31. Jänner 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-AT > 31. Jänner 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-AT > 31. Jänner 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-AT > 31. Jänner 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-AT > 31.01.2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-AT > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-AT > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-AT > 31.01.2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-AT > 31.01.2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-CH > Freitag, 31. Januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-CH > Freitag, 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-CH > Freitag, 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-CH > Freitag, 31. Januar 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-CH > Freitag, 31. Januar 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-CH > 31. Januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-CH > 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-CH > 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-CH > 31. Januar 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-CH > 31. Januar 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-CH > 31.01.2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-CH > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-CH > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-CH > 31.01.2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-CH > 31.01.2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-DE > Freitag, 31. Januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-DE > Freitag, 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-DE > Freitag, 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-DE > Freitag, 31. Januar 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-DE > Freitag, 31. Januar 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-DE > 31. Januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-DE > 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-DE > 31. Januar 2020 um 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-DE > 31. Januar 2020 um 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-DE > 31. Januar 2020 um 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > de-DE > 31.01.2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > de-DE > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > de-DE > 31.01.2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > de-DE > 31.01.2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > de-DE > 31.01.2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 στις 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 στις 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 στις 1:31:20 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 στις 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > el-GR > Παρασκευή 31 Ιανουαρίου 2020 στις 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 στις 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 στις 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 στις 1:31:20 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 στις 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > el-GR > 31 Ιανουαρίου 2020 στις 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > el-GR > 31 Ιαν 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > el-GR > 31 Ιαν 2020, 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > el-GR > 31 Ιαν 2020, 1:31:20 πμ UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > el-GR > 31 Ιαν 2020, 1:31:20 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > el-GR > 31 Ιαν 2020, 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > el-GR > 31 Ιαν 2020, 1:31 πμ > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-AU > Friday 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-AU > Friday 31 January 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-AU > Friday 31 January 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-AU > Friday 31 January 2020 at 1:31:20 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-AU > Friday 31 January 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-AU > Friday 31 January 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-AU > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-AU > 31 January 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-AU > 31 January 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-AU > 31 January 2020 at 1:31:20 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-AU > 31 January 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-AU > 31 January 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-AU > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-AU > 31 Jan 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-AU > 31 Jan 2020 at 1:31:20 am UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-AU > 31 Jan 2020 at 1:31:20 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-AU > 31 Jan 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-AU > 31 Jan 2020 at 1:31 am > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-CA > Friday, January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-CA > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-CA > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-CA > Friday, January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-CA > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-CA > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-CA > January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-CA > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-CA > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-CA > January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-CA > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-CA > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-CA > Jan 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-CA > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-CA > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-CA > Jan 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-CA > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-CA > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-GB > Friday 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-GB > Friday 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-GB > Friday 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-GB > Friday 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-GB > Friday 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-GB > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-GB > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-GB > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-GB > 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-GB > 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-GB > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-GB > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-GB > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-GB > 31 Jan 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-GB > 31 Jan 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IE > Friday 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IE > Friday 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IE > Friday 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IE > Friday 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-IE > Friday 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IE > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IE > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IE > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IE > 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-IE > 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IE > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IE > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IE > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IE > 31 Jan 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-IE > 31 Jan 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IN > Friday, 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IN > Friday, 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IN > Friday, 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IN > Friday, 31 January 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-IN > Friday, 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-IN > Friday, 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IN > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IN > 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IN > 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IN > 31 January 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-IN > 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-IN > 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-IN > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-IN > 31 Jan 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-IN > 31 Jan 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-IN > 31 Jan 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-IN > 31 Jan 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-IN > 31 Jan 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-NZ > Friday, 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-NZ > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-NZ > 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-NZ > 31 January 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-NZ > 31 January 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-NZ > 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-NZ > 31 January 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-NZ > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-NZ > 31 Jan 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-NZ > 31 Jan 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-NZ > 31 Jan 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-NZ > 31 Jan 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-NZ > 31 Jan 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-US > Friday, January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-US > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-US > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-US > Friday, January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-US > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-US > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-US > January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-US > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-US > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-US > January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-US > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-US > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-US > Jan 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-US > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-US > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-US > Jan 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > en-US > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > en-US > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-ZA > Friday, 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-ZA > Friday, 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-ZA > Friday, 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-ZA > Friday, 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-ZA > Friday, 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-ZA > 31 January 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-ZA > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-ZA > 31 January 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-ZA > 31 January 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-ZA > 31 January 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > en-ZA > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > en-ZA > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > en-ZA > 31 Jan 2020 at 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > en-ZA > 31 Jan 2020 at 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > en-ZA > 31 Jan 2020 at 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020, 1:31:20 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-AR > viernes, 31 de enero de 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-AR > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-AR > 31 de enero de 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-AR > 31 de enero de 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-AR > 31 de enero de 2020, 1:31:20 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-AR > 31 de enero de 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-AR > 31 de enero de 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-AR > 31 ene 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-AR > 31 ene 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-AR > 31 ene 2020, 1:31:20 a. m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-AR > 31 ene 2020, 1:31:20 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-AR > 31 ene 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-AR > 31 ene 2020, 1:31 a. m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CL > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CL > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CL > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CL > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CL > 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CL > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CL > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CL > 31-01-2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CL > 31-01-2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CL > 31-01-2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CL > 31-01-2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CL > 31-01-2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CL > 31-01-2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CO > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CO > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CO > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CO > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CO > 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CO > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CO > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-CO > 31/01/2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-CO > 31/01/2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-CO > 31/01/2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-CO > 31/01/2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-CO > 31/01/2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-CO > 31/01/2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-ES > viernes, 31 de enero de 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-ES > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-ES > 31 de enero de 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-ES > 31 de enero de 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-ES > 31 de enero de 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-ES > 31 de enero de 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-ES > 31 de enero de 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-ES > 31 ene 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-ES > 31 ene 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-ES > 31 ene 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-ES > 31 ene 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-ES > 31 ene 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-ES > 31 ene 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-MX > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-MX > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-MX > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-MX > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-MX > 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-MX > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-MX > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-MX > 31 ene 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-MX > 31 ene 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-MX > 31 ene 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-MX > 31 ene 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-MX > 31 ene 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-MX > 31 ene 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-US > viernes, 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-US > 31 de enero de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-US > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-US > 31 de enero de 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-US > 31 de enero de 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-US > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-US > 31 de enero de 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > es-US > ene 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > es-US > ene 31, 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > es-US > ene 31, 2020, 1:31:20 a.m. UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > es-US > ene 31, 2020, 1:31:20 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > es-US > ene 31, 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > es-US > ene 31, 2020, 1:31 a.m. > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fi-FI > perjantai 31. tammikuuta 2020 > {\"year\":2020,\"month\":1,\"day\":31}", "✅ > latn > gregory > fi-FI > perjantai 31. tammikuuta 2020 klo 1.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fi-FI > perjantai 31. tammikuuta 2020 klo 1.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > fi-FI > perjantai 31. tammikuuta 2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > fi-FI > perjantai 31. tammikuuta 2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 klo 1.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 klo 1.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 klo 1.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > fi-FI > 31. tammikuuta 2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fi-FI > 31.1.2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fi-FI > 31.1.2020 klo 1.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fi-FI > 31.1.2020 klo 1.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fi-FI > 31.1.2020 klo 1.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > fi-FI > 31.1.2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > fi-FI > 31.1.2020 klo 1.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-BE > vendredi 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-BE > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-BE > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-BE > vendredi 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-BE > vendredi 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-BE > 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-BE > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-BE > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-BE > 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-BE > 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-BE > 31 janv. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-BE > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-BE > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-BE > 31 janv. 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-BE > 31 janv. 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CA > vendredi 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CA > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CA > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CA > vendredi 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CA > vendredi 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CA > 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CA > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CA > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CA > 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CA > 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CA > 31 janv. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CA > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CA > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CA > 31 janv. 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CA > 31 janv. 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CH > vendredi, 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CH > vendredi, 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CH > vendredi, 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CH > vendredi, 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CH > vendredi, 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CH > 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CH > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CH > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CH > 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CH > 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-CH > 31 janv. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-CH > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-CH > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-CH > 31 janv. 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-CH > 31 janv. 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-FR > vendredi 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-FR > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-FR > vendredi 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-FR > vendredi 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-FR > vendredi 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-FR > 31 janvier 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-FR > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-FR > 31 janvier 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-FR > 31 janvier 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-FR > 31 janvier 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > fr-FR > 31 janv. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > fr-FR > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > fr-FR > 31 janv. 2020 à 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > fr-FR > 31 janv. 2020 à 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > fr-FR > 31 janv. 2020 à 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 בשעה 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 בשעה 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 בשעה 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 בשעה 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > he-IL > יום שישי, 31 בינואר 2020 בשעה 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > he-IL > 31 בינואר 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > he-IL > 31 בינואר 2020 בשעה 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > he-IL > 31 בינואר 2020 בשעה 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > he-IL > 31 בינואר 2020 בשעה 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > he-IL > 31 בינואר 2020 בשעה 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > he-IL > 31 בינואר 2020 בשעה 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > he-IL > 31 בינו׳ 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > he-IL > 31 בינו׳ 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > he-IL > 31 בינו׳ 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > he-IL > 31 בינו׳ 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > he-IL > 31 בינו׳ 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > he-IL > 31 בינו׳ 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 को पू 1:31:20 UTC बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 को पू 1:31:20 UTC बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 को पू 1:31:20 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 को पू 1:31 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hi-IN > शुक्रवार, 31 जनवरी 2020 को पू 1:31 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 को पू 1:31:20 UTC बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 को पू 1:31:20 UTC बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 को पू 1:31:20 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 को पू 1:31 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hi-IN > 31 जनवरी 2020 को पू 1:31 बजे > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hi-IN > 31 जन॰ 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > hi-IN > 31 जन॰ 2020, पू 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > hi-IN > 31 जन॰ 2020, पू 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > hi-IN > 31 जन॰ 2020, पू 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hi-IN > 31 जन॰ 2020, पू 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hi-IN > 31 जन॰ 2020, पू 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hu-HU > 2020. január 31., péntek > {\"year\":2020,\"month\":1,\"day\":31}", "✅ > latn > gregory > hu-HU > 2020. január 31., péntek 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > hu-HU > 2020. január 31., péntek 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hu-HU > 2020. január 31., péntek 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hu-HU > 2020. január 31., péntek 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hu-HU > 2020. január 31. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > hu-HU > 2020. január 31. 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > hu-HU > 2020. január 31. 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > hu-HU > 2020. január 31. 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hu-HU > 2020. január 31. 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hu-HU > 2020. január 31. 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > hu-HU > 2020. jan. 31. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > hu-HU > 2020. jan. 31. 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > hu-HU > 2020. jan. 31. 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > hu-HU > 2020. jan. 31. 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > hu-HU > 2020. jan. 31. 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > hu-HU > 2020. jan. 31. 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > id-ID > Jumat, 31 Januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > id-ID > Jumat, 31 Januari 2020 pukul 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > id-ID > Jumat, 31 Januari 2020 pukul 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > id-ID > Jumat, 31 Januari 2020 pukul 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > id-ID > Jumat, 31 Januari 2020 pukul 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > id-ID > 31 Januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > id-ID > 31 Januari 2020 pukul 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > id-ID > 31 Januari 2020 pukul 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > id-ID > 31 Januari 2020 pukul 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > id-ID > 31 Januari 2020 pukul 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > id-ID > 31 Jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > id-ID > 31 Jan 2020, 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > id-ID > 31 Jan 2020, 01.31.20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > id-ID > 31 Jan 2020, 01.31.20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > id-ID > 31 Jan 2020, 01.31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-CH > venerdì, 31 gennaio 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-CH > venerdì, 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-CH > venerdì, 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-CH > venerdì, 31 gennaio 2020 alle ore 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-CH > venerdì, 31 gennaio 2020 alle ore 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-CH > 31 gennaio 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-CH > 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-CH > 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-CH > 31 gennaio 2020 alle ore 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-CH > 31 gennaio 2020 alle ore 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-CH > 31 gen 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-CH > 31 gen 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-CH > 31 gen 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-CH > 31 gen 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-CH > 31 gen 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-IT > venerdì 31 gennaio 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-IT > venerdì 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-IT > venerdì 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-IT > venerdì 31 gennaio 2020 alle ore 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-IT > venerdì 31 gennaio 2020 alle ore 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-IT > 31 gennaio 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-IT > 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-IT > 31 gennaio 2020 alle ore 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-IT > 31 gennaio 2020 alle ore 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-IT > 31 gennaio 2020 alle ore 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > it-IT > 31 gen 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > it-IT > 31 gen 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > it-IT > 31 gen 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > it-IT > 31 gen 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > it-IT > 31 gen 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > jp-JP > Friday, January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > jp-JP > January 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > jp-JP > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > jp-JP > January 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > jp-JP > January 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > jp-JP > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > jp-JP > January 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > jp-JP > Jan 31, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > jp-JP > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > jp-JP > Jan 31, 2020 at 1:31:20 AM UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > jp-JP > Jan 31, 2020 at 1:31:20 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > jp-JP > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > jp-JP > Jan 31, 2020 at 1:31 AM > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 오전 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ko-KR > 2020년 1월 31일 금요일 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ko-KR > 2020년 1월 31일 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ko-KR > 2020년 1월 31일 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ko-KR > 2020년 1월 31일 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ko-KR > 2020년 1월 31일 오전 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ko-KR > 2020년 1월 31일 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ko-KR > 2020년 1월 31일 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ko-KR > 2020. 1. 31. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ko-KR > 2020. 1. 31. 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ko-KR > 2020. 1. 31. 오전 1시 31분 20초 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ko-KR > 2020. 1. 31. 오전 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ko-KR > 2020. 1. 31. 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ko-KR > 2020. 1. 31. 오전 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-BE > vrijdag 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-BE > vrijdag 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-BE > vrijdag 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-BE > vrijdag 31 januari 2020 om 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-BE > vrijdag 31 januari 2020 om 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-BE > 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-BE > 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-BE > 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-BE > 31 januari 2020 om 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-BE > 31 januari 2020 om 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-BE > 31 jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-BE > 31 jan 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-BE > 31 jan 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-BE > 31 jan 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-BE > 31 jan 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-NL > vrijdag 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-NL > vrijdag 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-NL > vrijdag 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-NL > vrijdag 31 januari 2020 om 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-NL > vrijdag 31 januari 2020 om 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-NL > 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-NL > 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-NL > 31 januari 2020 om 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-NL > 31 januari 2020 om 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-NL > 31 januari 2020 om 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > nl-NL > 31 jan 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > nl-NL > 31 jan 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > nl-NL > 31 jan 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > nl-NL > 31 jan 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > nl-NL > 31 jan 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > no-NO > fredag 31. januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > no-NO > fredag 31. januar 2020 kl. 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > no-NO > fredag 31. januar 2020 kl. 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > no-NO > fredag 31. januar 2020 kl. 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > no-NO > fredag 31. januar 2020 kl. 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > no-NO > 31. januar 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > no-NO > 31. januar 2020 kl. 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > no-NO > 31. januar 2020 kl. 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > no-NO > 31. januar 2020 kl. 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > no-NO > 31. januar 2020 kl. 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > no-NO > 31. jan. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > no-NO > 31. jan. 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > no-NO > 31. jan. 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > no-NO > 31. jan. 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > no-NO > 31. jan. 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pl-PL > piątek, 31 stycznia 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pl-PL > piątek, 31 stycznia 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pl-PL > piątek, 31 stycznia 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pl-PL > piątek, 31 stycznia 2020 o 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pl-PL > piątek, 31 stycznia 2020 o 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pl-PL > 31 stycznia 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pl-PL > 31 stycznia 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pl-PL > 31 stycznia 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pl-PL > 31 stycznia 2020 o 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pl-PL > 31 stycznia 2020 o 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pl-PL > 31 sty 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pl-PL > 31 sty 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pl-PL > 31 sty 2020 o 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pl-PL > 31 sty 2020 o 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pl-PL > 31 sty 2020 o 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-BR > sexta-feira, 31 de janeiro de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-BR > sexta-feira, 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-BR > sexta-feira, 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-BR > sexta-feira, 31 de janeiro de 2020 às 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-BR > sexta-feira, 31 de janeiro de 2020 às 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-BR > 31 de janeiro de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-BR > 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-BR > 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-BR > 31 de janeiro de 2020 às 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-BR > 31 de janeiro de 2020 às 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-BR > 31 de jan. de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-BR > 31 de jan. de 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-BR > 31 de jan. de 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-BR > 31 de jan. de 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-BR > 31 de jan. de 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-PT > sexta-feira, 31 de janeiro de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-PT > sexta-feira, 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-PT > sexta-feira, 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-PT > sexta-feira, 31 de janeiro de 2020 às 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-PT > sexta-feira, 31 de janeiro de 2020 às 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-PT > 31 de janeiro de 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-PT > 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-PT > 31 de janeiro de 2020 às 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-PT > 31 de janeiro de 2020 às 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-PT > 31 de janeiro de 2020 às 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > pt-PT > 31/01/2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > pt-PT > 31/01/2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > pt-PT > 31/01/2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > pt-PT > 31/01/2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > pt-PT > 31/01/2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ro-RO > vineri, 31 ianuarie 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ro-RO > vineri, 31 ianuarie 2020 la 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ro-RO > vineri, 31 ianuarie 2020 la 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ro-RO > vineri, 31 ianuarie 2020 la 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ro-RO > vineri, 31 ianuarie 2020 la 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ro-RO > 31 ianuarie 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ro-RO > 31 ianuarie 2020 la 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ro-RO > 31 ianuarie 2020 la 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ro-RO > 31 ianuarie 2020 la 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ro-RO > 31 ianuarie 2020 la 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ro-RO > 31 ian. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ro-RO > 31 ian. 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ro-RO > 31 ian. 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ro-RO > 31 ian. 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ro-RO > 31 ian. 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ru-RU > пятница, 31 января 2020 г. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ru-RU > пятница, 31 января 2020 г. в 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ru-RU > пятница, 31 января 2020 г. в 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ru-RU > пятница, 31 января 2020 г. в 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ru-RU > пятница, 31 января 2020 г. в 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ru-RU > 31 января 2020 г. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ru-RU > 31 января 2020 г. в 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ru-RU > 31 января 2020 г. в 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ru-RU > 31 января 2020 г. в 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ru-RU > 31 января 2020 г. в 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ru-RU > 31 янв. 2020 г. > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ru-RU > 31 янв. 2020 г., 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ru-RU > 31 янв. 2020 г., 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ru-RU > 31 янв. 2020 г., 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ru-RU > 31 янв. 2020 г., 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > sk-SK > piatok, 31. januára 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sk-SK > 31. januára 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sk-SK > 31. januára 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sk-SK > 31. januára 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sk-SK > 31. januára 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > sk-SK > 31. januára 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > sk-SK > 31. januára 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sk-SK > 31. 1. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sk-SK > 31. 1. 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sk-SK > 31. 1. 2020, 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sk-SK > 31. 1. 2020, 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > sk-SK > 31. 1. 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > sk-SK > 31. 1. 2020, 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sv-SE > fredag 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sv-SE > fredag 31 januari 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sv-SE > fredag 31 januari 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sv-SE > fredag 31 januari 2020 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > sv-SE > fredag 31 januari 2020 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sv-SE > 31 januari 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sv-SE > 31 januari 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sv-SE > 31 januari 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sv-SE > 31 januari 2020 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > sv-SE > 31 januari 2020 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > sv-SE > 31 jan. 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > sv-SE > 31 jan. 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > sv-SE > 31 jan. 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > sv-SE > 31 jan. 2020 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > sv-SE > 31 jan. 2020 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 அன்று AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 அன்று AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 அன்று AM 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 அன்று AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ta-IN > வெள்ளி, 31 ஜனவரி, 2020 அன்று AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 அன்று AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 அன்று AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 அன்று AM 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 அன்று AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ta-IN > 31 ஜனவரி, 2020 அன்று AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-IN > 31 ஜன., 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-IN > 31 ஜன., 2020, AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-IN > 31 ஜன., 2020, AM 1:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-IN > 31 ஜன., 2020, AM 1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > ta-IN > 31 ஜன., 2020, AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > ta-IN > 31 ஜன., 2020, AM 1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-LK > வெள்ளி, 31 ஜனவரி, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-LK > வெள்ளி, 31 ஜனவரி, 2020 அன்று 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-LK > வெள்ளி, 31 ஜனவரி, 2020 அன்று 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-LK > வெள்ளி, 31 ஜனவரி, 2020 அன்று 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ta-LK > வெள்ளி, 31 ஜனவரி, 2020 அன்று 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-LK > 31 ஜனவரி, 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-LK > 31 ஜனவரி, 2020 அன்று 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-LK > 31 ஜனவரி, 2020 அன்று 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-LK > 31 ஜனவரி, 2020 அன்று 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ta-LK > 31 ஜனவரி, 2020 அன்று 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > ta-LK > 31 ஜன., 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > ta-LK > 31 ஜன., 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > ta-LK > 31 ஜன., 2020, 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > ta-LK > 31 ஜன., 2020, 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > ta-LK > 31 ஜன., 2020, 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > buddhist > th-TH > วันศุกร์ที่ 31 มกราคม พ.ศ. 2563 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > buddhist > th-TH > วันศุกร์ที่ 31 มกราคม พ.ศ. 2563 เวลา 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > buddhist > th-TH > วันศุกร์ที่ 31 มกราคม พ.ศ. 2563 เวลา 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > buddhist > th-TH > วันศุกร์ที่ 31 มกราคม พ.ศ. 2563 เวลา 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > buddhist > th-TH > วันศุกร์ที่ 31 มกราคม พ.ศ. 2563 เวลา 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > buddhist > th-TH > 31 มกราคม 2563 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > buddhist > th-TH > 31 มกราคม 2563 เวลา 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > buddhist > th-TH > 31 มกราคม 2563 เวลา 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > buddhist > th-TH > 31 มกราคม 2563 เวลา 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > buddhist > th-TH > 31 มกราคม 2563 เวลา 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > buddhist > th-TH > 31 ม.ค. 2563 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > buddhist > th-TH > 31 ม.ค. 2563 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > buddhist > th-TH > 31 ม.ค. 2563 1 นาฬิกา 31 นาที 20 วินาที UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > buddhist > th-TH > 31 ม.ค. 2563 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > buddhist > th-TH > 31 ม.ค. 2563 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 Cuma > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > tr-TR > 31 Ocak 2020 Cuma 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > tr-TR > 31 Ocak 2020 Cuma 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 Cuma 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 Cuma 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > tr-TR > 31 Ocak 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > tr-TR > 31 Ocak 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > tr-TR > 31 Ocak 2020 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > tr-TR > 31 Oca 2020 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > tr-TR > 31 Oca 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > tr-TR > 31 Oca 2020 01:31:20 UTC > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > tr-TR > 31 Oca 2020 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > tr-TR > 31 Oca 2020 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-CN > 2020年1月31日 星期五 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-CN > 2020年1月31日 星期五 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-CN > 2020年1月31日 星期五 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-CN > 2020年1月31日 星期五 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > zh-CN > 2020年1月31日 星期五 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-CN > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-CN > 2020年1月31日 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-CN > 2020年1月31日 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-CN > 2020年1月31日 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > zh-CN > 2020年1月31日 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-CN > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-CN > 2020年1月31日 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-CN > 2020年1月31日 UTC 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-CN > 2020年1月31日 01:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", "✅ > latn > gregory > zh-CN > 2020年1月31日 01:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 上午1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 星期五 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-HK > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-HK > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 [UTC] > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > zh-HK > 2020年1月31日 上午1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > zh-TW > 2020年1月31日 星期五 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-TW > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-TW > 2020年1月31日 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}", + "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}", "✅ > latn > gregory > zh-TW > 2020年1月31日 > {\"year\":2020,\"month\":1,\"day\":31}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", + "✅ > latn > gregory > zh-TW > 2020年1月31日 UTC 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20,\"offset\":0}", "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31:20 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":20}", - "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31,\"second\":0}" + "✅ > latn > gregory > zh-TW > 2020年1月31日 凌晨1:31 > {\"year\":2020,\"month\":1,\"day\":31,\"hour\":1,\"minute\":31}" ] \ No newline at end of file diff --git a/test-fixtures/testBuiltInFormats.ts b/test-fixtures/testBuiltInFormats.ts new file mode 100644 index 0000000..2fe2502 --- /dev/null +++ b/test-fixtures/testBuiltInFormats.ts @@ -0,0 +1,72 @@ +import { describe, expect, it } from 'vitest'; +import { HandlerResult } from '../src/Format/Format'; +import Parser from '../src/Parser/Parser'; +import localeList from './localeList'; + +const dateStyles = ['full', 'long', 'medium'] as const; +export default function testBuiltInFormats( + parser: Parser, + dateObj: Date, + parts: HandlerResult +) { + describe(`Built-in formats for ${dateObj.toJSON()}`, () => { + function testIt( + locale: string, + options: Intl.DateTimeFormatOptions, + expectedSubset: HandlerResult + ) { + if (locale.startsWith('ar')) { + options.calendar = 'gregory'; + } + const formatter = new Intl.DateTimeFormat(locale, options); + const { numberingSystem, calendar } = formatter.resolvedOptions(); + const formatted = formatter.format(dateObj); + const parsed = parser.attempt(formatted, locale); + it(`should handle ${numberingSystem} - ${calendar} - ${locale} - ${formatted}`, () => { + // if (calendar === 'buddhist') { + // parsed.year += 543; + // } + expect(parsed).toMatchObject(expectedSubset); + }); + } + for (const locale of localeList) { + const ymd = { + year: parts.year, + month: parts.month, + day: parts.day, + }; + // const fmt = new Intl.NumberFormat(locale); + // const numberSystem = fmt.resolvedOptions().numberingSystem; + for (const dateStyle of dateStyles) { + testIt(locale, { dateStyle }, ymd); + testIt( + locale, + { dateStyle, timeStyle: 'long', timeZone: 'UTC' }, + { + ...ymd, + hour: parts.hour, + minute: parts.minute, + second: parts.second, + } + ); + testIt( + locale, + { dateStyle, timeStyle: 'medium', timeZone: 'UTC' }, + { + ...ymd, + hour: parts.hour, + minute: parts.minute, + } + ); + testIt( + locale, + { dateStyle, timeStyle: 'short', timeZone: 'UTC' }, + { + ...ymd, + hour: parts.hour, + } + ); + } + } + }); +}