-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.ts
79 lines (67 loc) · 2.03 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import periodData from "./periods.json";
/**
* Converts Gregorian calendar year to Japanese calendar year
*/
export const japaneseYear: JapaneseYearFunction = gregorianDate => {
const gregorianYear = gregorianDate.getFullYear();
const gregorianMonth = gregorianDate.getMonth() + 1;
const gregorianDay = gregorianDate.getDate();
const periodsOrdered: Period[] = periodData.sort(
(a, b) => b.startYear - a.startYear
);
if (gregorianYear < periodsOrdered[periodsOrdered.length - 1].startYear)
return undefined;
const exactPeriod: Period | undefined = periodsOrdered.find(
(period: Period, i) => {
if (i === periodsOrdered.length - 1) return true;
if (gregorianYear > period.startYear) return true;
if (
gregorianYear === period.startYear &&
gregorianMonth > period.startMonth
) {
return true;
}
if (
gregorianYear === period.startYear &&
gregorianMonth === period.startMonth &&
gregorianDay >= period.startDay
) {
return true;
}
return false;
}
);
let updatedPeriod;
if (exactPeriod) {
updatedPeriod = {
currentJapaneseYear: gregorianYear - exactPeriod.startYear + 1,
...exactPeriod
};
}
return updatedPeriod;
};
/**
* Converts Japanese calendar year to Gregorian year range
* @param {String} year
* @return {YearRange | undefined}
*/
export const gregorianYearRange: GregorianYearRangeFunction = (
japanesePeriod
): YearRange | undefined => {
let yearRange: YearRange | undefined = undefined;
const foundPeriod = periodData.find(
period =>
period.names.kanji === japanesePeriod ||
period.names.hiragana === japanesePeriod ||
period.names.english === japanesePeriod
);
if (foundPeriod) {
const previousPeriod = periodData[periodData.indexOf(foundPeriod) - 1];
const previousYear = previousPeriod && previousPeriod.startYear - 1;
yearRange = {
startYear: foundPeriod.startYear,
endYear: previousYear
};
}
return yearRange;
};