Skip to content

Commit

Permalink
Merge pull request #4599 from eternalharvest:feature/era_names
Browse files Browse the repository at this point in the history
[feature] Add era support for en,ja (closes #4591)
  • Loading branch information
ichernev committed Apr 27, 2020
2 parents 647dbd2 + 0c7d8da commit 4b615b9
Show file tree
Hide file tree
Showing 11 changed files with 601 additions and 3 deletions.
11 changes: 9 additions & 2 deletions src/lib/create/from-string-and-format.js
Expand Up @@ -8,7 +8,7 @@ import {
formattingTokens,
} from '../format/format';
import checkOverflow from './check-overflow';
import { HOUR } from '../units/constants';
import { YEAR, HOUR } from '../units/constants';
import { hooks } from '../utils/hooks';
import getParsingFlags from './parsing-flags';

Expand Down Expand Up @@ -40,7 +40,8 @@ export function configFromStringAndFormat(config) {
token,
skipped,
stringLength = string.length,
totalParsedInputLength = 0;
totalParsedInputLength = 0,
era;

tokens =
expandFormat(config._f, config._locale).match(formattingTokens) || [];
Expand Down Expand Up @@ -99,6 +100,12 @@ export function configFromStringAndFormat(config) {
config._meridiem
);

// handle era
era = getParsingFlags(config).era;
if (era !== null) {
config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
}

configFromArray(config);
checkOverflow(config);
}
Expand Down
2 changes: 2 additions & 0 deletions src/lib/create/parsing-flags.js
Expand Up @@ -7,11 +7,13 @@ function defaultParsingFlags() {
overflow: -2,
charsLeftOver: 0,
nullInput: false,
invalidEra: null,
invalidMonth: null,
invalidFormat: false,
userInvalidated: false,
iso: false,
parsedDateParts: [],
era: null,
meridiem: null,
rfc2822: false,
weekdayMismatch: false,
Expand Down
1 change: 1 addition & 0 deletions src/lib/create/valid.js
Expand Up @@ -13,6 +13,7 @@ export function isValid(m) {
!isNaN(m._d.getTime()) &&
flags.overflow < 0 &&
!flags.empty &&
!flags.invalidEra &&
!flags.invalidMonth &&
!flags.invalidWeekday &&
!flags.weekdayMismatch &&
Expand Down
2 changes: 1 addition & 1 deletion src/lib/format/format.js
@@ -1,7 +1,7 @@
import zeroFill from '../utils/zero-fill';
import isFunction from '../utils/is-function';

var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
formatFunctions = {},
formatTokenFunctions = {};
Expand Down
18 changes: 18 additions & 0 deletions src/lib/locale/en.js
Expand Up @@ -3,6 +3,24 @@ import { getSetGlobalLocale } from './locales';
import toInt from '../utils/to-int';

getSetGlobalLocale('en', {
eras: [
{
since: '0001-01-01',
until: +Infinity,
offset: 1,
name: 'Anno Domini',
narrow: 'AD',
abbr: 'AD',
},
{
since: '0000-12-31',
until: -Infinity,
offset: 1,
name: 'Before Christ',
narrow: 'BC',
abbr: 'BC',
},
],
dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
ordinal: function (number) {
var b = number % 10,
Expand Down
16 changes: 16 additions & 0 deletions src/lib/locale/prototype.js
Expand Up @@ -20,6 +20,22 @@ proto.relativeTime = relativeTime;
proto.pastFuture = pastFuture;
proto.set = set;

// Eras
import {
localeEras,
localeErasParse,
localeErasConvertYear,
erasAbbrRegex,
erasNameRegex,
erasNarrowRegex,
} from '../units/era';
proto.eras = localeEras;
proto.erasParse = localeErasParse;
proto.erasConvertYear = localeErasConvertYear;
proto.erasAbbrRegex = erasAbbrRegex;
proto.erasNameRegex = erasNameRegex;
proto.erasNarrowRegex = erasNarrowRegex;

// Month
import {
localeMonthsParse,
Expand Down
7 changes: 7 additions & 0 deletions src/lib/moment/prototype.js
Expand Up @@ -69,6 +69,13 @@ proto.unix = unix;
proto.valueOf = valueOf;
proto.creationData = creationData;

// Era
import { getEraName, getEraNarrow, getEraAbbr, getEraYear } from '../units/era';
proto.eraName = getEraName;
proto.eraNarrow = getEraNarrow;
proto.eraAbbr = getEraAbbr;
proto.eraYear = getEraYear;

// Year
import { getSetYear, getIsLeapYear } from '../units/year';
proto.year = getSetYear;
Expand Down

0 comments on commit 4b615b9

Please sign in to comment.