Skip to content

Commit fa5f0cb

Browse files
authored
feat: support date-fns (#107)
* feat: support date-fns * delete * feat: complete parse * update * fix lint * adjust lint * fix compile * fix: type
1 parent b0d3b62 commit fa5f0cb

File tree

3 files changed

+191
-106
lines changed

3 files changed

+191
-106
lines changed

package.json

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@
4040
"dependencies": {
4141
"@babel/runtime": "^7.10.1",
4242
"classnames": "^2.2.1",
43+
"date-fns": "^2.15.0",
44+
"dayjs": "^1.8.30",
4345
"moment": "^2.24.0",
4446
"rc-trigger": "^4.0.0",
4547
"rc-util": "^5.0.1",
48+
"react": "^16.0.0",
4649
"shallowequal": "^1.1.0"
4750
},
4851
"engines": {
@@ -58,7 +61,6 @@
5861
"@umijs/fabric": "^2.0.8",
5962
"coveralls": "^3.0.6",
6063
"cross-env": "^7.0.2",
61-
"dayjs": "^1.8.18",
6264
"enzyme": "^3.0.0",
6365
"enzyme-adapter-react-16": "^1.0.1",
6466
"enzyme-to-json": "^3.4.0",
@@ -72,16 +74,10 @@
7274
"mockdate": "^3.0.2",
7375
"np": "^6.2.3",
7476
"prettier": "^2.0.5",
75-
"react": "^16.0.0",
7677
"react-dom": "^16.0.0",
7778
"react-test-renderer": "^16.0.0",
7879
"typescript": "^3.7.2"
7980
},
80-
"peerDependencies": {
81-
"dayjs": "^1.8.18",
82-
"react": "^16.0.0",
83-
"react-dom": "^16.0.0"
84-
},
8581
"cnpm": {
8682
"mode": "npm"
8783
},

src/generate/dateFns.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import {
2+
getDay,
3+
getYear,
4+
getMonth,
5+
getDate,
6+
getHours,
7+
getMinutes,
8+
getSeconds,
9+
addYears,
10+
addMonths,
11+
addDays,
12+
setYear,
13+
setMonth,
14+
setDate,
15+
setHours,
16+
setMinutes,
17+
setSeconds,
18+
isAfter,
19+
isValid,
20+
getWeek,
21+
format as formatDate,
22+
parse as parseDate,
23+
} from 'date-fns';
24+
import * as Locale from 'date-fns/locale';
25+
import { GenerateConfig } from '.';
26+
27+
const dealLocal = (str: string) => {
28+
return str.replace(/_/g, '');
29+
};
30+
31+
const generateConfig: GenerateConfig<Date> = {
32+
// get
33+
getNow: () => new Date(),
34+
getWeekDay: date => getDay(date),
35+
getYear: date => getYear(date),
36+
getMonth: date => getMonth(date),
37+
getDate: date => getDate(date),
38+
getHour: date => getHours(date),
39+
getMinute: date => getMinutes(date),
40+
getSecond: date => getSeconds(date),
41+
42+
// set
43+
addYear: (date, diff) => addYears(date, diff),
44+
addMonth: (date, diff) => addMonths(date, diff),
45+
addDate: (date, diff) => addDays(date, diff),
46+
setYear: (date, year) => setYear(date, year),
47+
setMonth: (date, month) => setMonth(date, month),
48+
setDate: (date, num) => setDate(date, num),
49+
setHour: (date, hour) => setHours(date, hour),
50+
setMinute: (date, minute) => setMinutes(date, minute),
51+
setSecond: (date, second) => setSeconds(date, second),
52+
53+
// Compare
54+
isAfter: (date1, date2) => isAfter(date1, date2),
55+
isValidate: date => isValid(date),
56+
57+
locale: {
58+
getWeekFirstDay: locale => {
59+
const clone = Locale[dealLocal(locale)];
60+
return clone.options.weekStartsOn;
61+
},
62+
getWeek: (locale, date) => {
63+
return getWeek(date, { locale: Locale[dealLocal(locale)] });
64+
},
65+
format: (locale, date, format) => {
66+
if (!isValid(date)) {
67+
return null;
68+
}
69+
return formatDate(date, format, { locale: Locale[dealLocal(locale)] });
70+
},
71+
parse: (locale, text, formats) => {
72+
for (let i = 0; i < formats.length; i += 1) {
73+
const format = formats[i];
74+
const formatText = text;
75+
const date = parseDate(formatText, format, new Date(), {
76+
locale: Locale[dealLocal(locale)],
77+
});
78+
if (isValid(date)) {
79+
return date;
80+
}
81+
}
82+
return null;
83+
},
84+
},
85+
};
86+
87+
export default generateConfig;

0 commit comments

Comments
 (0)