Skip to content

Commit dde6103

Browse files
author
Wanasit Tanakitrungruang
committedMay 30, 2021
New: BCE/CE year label support
1 parent 5ec4650 commit dde6103

File tree

3 files changed

+82
-45
lines changed

3 files changed

+82
-45
lines changed
 

‎src/locales/en/constants.ts

+7-6
Original file line numberDiff line numberDiff line change
@@ -198,22 +198,23 @@ export function parseOrdinalNumberPattern(match: string): number {
198198

199199
//-----------------------------
200200

201-
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC)|[1-2][0-9]{3}|[5-9][0-9])`;
201+
export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s*(?:BE|AD|BC|BCE|CE)|[1-2][0-9]{3}|[5-9][0-9])`;
202202
export function parseYear(match: string): number {
203203
if (/BE/i.test(match)) {
204204
// Buddhist Era
205205
match = match.replace(/BE/i, "");
206206
return parseInt(match) - 543;
207207
}
208208

209-
if (/BC/i.test(match)) {
210-
// Before Christ
211-
match = match.replace(/BC/i, "");
209+
if (/BCE?/i.test(match)) {
210+
// Before Christ, Before Common Era
211+
match = match.replace(/BCE?/i, "");
212212
return -parseInt(match);
213213
}
214214

215-
if (/AD/i.test(match)) {
216-
match = match.replace(/AD/i, "");
215+
if (/(AD|CE)/i.test(match)) {
216+
// Anno Domini, Common Era
217+
match = match.replace(/(AD|CE)/i, "");
217218
return parseInt(match);
218219
}
219220

‎test/en/en_month_name_little_endian.test.ts

-39
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,6 @@ test("Test - Single expression", () => {
2626
expect(result.start).toBeDate(new Date(1982, 2 - 1, 3, 12));
2727
});
2828

29-
testSingleCase(chrono, "10 August 2555 BE", new Date(2012, 7, 10), (result) => {
30-
expect(result.index).toBe(0);
31-
expect(result.text).toBe("10 August 2555 BE");
32-
33-
expect(result.start).not.toBeNull();
34-
expect(result.start.get("year")).toBe(2012);
35-
expect(result.start.get("month")).toBe(8);
36-
expect(result.start.get("day")).toBe(10);
37-
38-
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
39-
});
40-
41-
testSingleCase(chrono, "10 August 234 BC", new Date(2012, 7, 10), (result) => {
42-
expect(result.index).toBe(0);
43-
expect(result.text).toBe("10 August 234 BC");
44-
45-
expect(result.start).not.toBeNull();
46-
expect(result.start.get("year")).toBe(-234);
47-
expect(result.start.get("month")).toBe(8);
48-
expect(result.start.get("day")).toBe(10);
49-
50-
expect(result.start).toBeDate(new Date(-234, 8 - 1, 10, 12));
51-
});
52-
53-
testSingleCase(chrono, "10 August 88 AD", new Date(2012, 7, 10), (result) => {
54-
expect(result.index).toBe(0);
55-
expect(result.text).toBe("10 August 88 AD");
56-
57-
expect(result.start).not.toBeNull();
58-
expect(result.start.get("year")).toBe(88);
59-
expect(result.start.get("month")).toBe(8);
60-
expect(result.start.get("day")).toBe(10);
61-
62-
const resultDate = result.start.date();
63-
const expectDate = new Date(88, 8 - 1, 10, 12);
64-
expectDate.setFullYear(88);
65-
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
66-
});
67-
6829
testSingleCase(chrono, "Sun 15Sep", new Date(2013, 7, 10), (result) => {
6930
expect(result.index).toBe(0);
7031
expect(result.text).toBe("Sun 15Sep");

‎test/en/en_year.test.ts

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import * as chrono from "../../src";
2+
import { testSingleCase, testUnexpectedResult } from "../test_util";
3+
import ENTimeExpressionParser from "../../src/locales/en/parsers/ENTimeExpressionParser";
4+
5+
test("Test - Year numbers with BCE/CE Era label", () => {
6+
testSingleCase(chrono, "10 August 234 BCE", new Date(2012, 7, 10), (result) => {
7+
expect(result.index).toBe(0);
8+
expect(result.text).toBe("10 August 234 BCE"); // fails since text is `10 August 234`
9+
10+
expect(result.start).not.toBeNull();
11+
expect(result.start.get("year")).toBe(-234);
12+
expect(result.start.get("month")).toBe(8);
13+
expect(result.start.get("day")).toBe(10);
14+
15+
expect(result.start).toBeDate(new Date(-234, 8 - 1, 10, 12));
16+
});
17+
18+
testSingleCase(chrono, "10 August 88 CE", new Date(2012, 7, 10), (result) => {
19+
expect(result.index).toBe(0);
20+
expect(result.text).toBe("10 August 88 CE");
21+
22+
expect(result.start).not.toBeNull();
23+
expect(result.start.get("year")).toBe(88);
24+
expect(result.start.get("month")).toBe(8);
25+
expect(result.start.get("day")).toBe(10);
26+
27+
const resultDate = result.start.date();
28+
const expectDate = new Date(88, 8 - 1, 10, 12);
29+
expectDate.setFullYear(88);
30+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
31+
});
32+
});
33+
34+
test("Test - Year numbers with BC/AD Era label", () => {
35+
testSingleCase(chrono, "10 August 234 BC", new Date(2012, 7, 10), (result) => {
36+
expect(result.index).toBe(0);
37+
expect(result.text).toBe("10 August 234 BC");
38+
39+
expect(result.start).not.toBeNull();
40+
expect(result.start.get("year")).toBe(-234);
41+
expect(result.start.get("month")).toBe(8);
42+
expect(result.start.get("day")).toBe(10);
43+
44+
expect(result.start).toBeDate(new Date(-234, 8 - 1, 10, 12));
45+
});
46+
47+
testSingleCase(chrono, "10 August 88 AD", new Date(2012, 7, 10), (result) => {
48+
expect(result.index).toBe(0);
49+
expect(result.text).toBe("10 August 88 AD");
50+
51+
expect(result.start).not.toBeNull();
52+
expect(result.start.get("year")).toBe(88);
53+
expect(result.start.get("month")).toBe(8);
54+
expect(result.start.get("day")).toBe(10);
55+
56+
const resultDate = result.start.date();
57+
const expectDate = new Date(88, 8 - 1, 10, 12);
58+
expectDate.setFullYear(88);
59+
expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
60+
});
61+
});
62+
63+
test("Test - Year numbers with Buddhist Era label", () => {
64+
testSingleCase(chrono, "10 August 2555 BE", new Date(2012, 7, 10), (result) => {
65+
expect(result.index).toBe(0);
66+
expect(result.text).toBe("10 August 2555 BE");
67+
68+
expect(result.start).not.toBeNull();
69+
expect(result.start.get("year")).toBe(2012);
70+
expect(result.start.get("month")).toBe(8);
71+
expect(result.start.get("day")).toBe(10);
72+
73+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
74+
});
75+
});

0 commit comments

Comments
 (0)
Please sign in to comment.