1 | import { isDate, isString, last } from '@antv/util';
|
2 | import fecha from 'fecha';
|
3 | import * as fecha1 from 'fecha';
|
4 |
|
5 | import bisector from './bisector';
|
6 | const FORMAT_METHOD = 'format';
|
7 |
|
8 | export function timeFormat(time, mask) {
|
9 | const method = fecha1[FORMAT_METHOD] || fecha[FORMAT_METHOD];
|
10 | return method(time, mask);
|
11 | }
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | export function toTimeStamp(value: any): number {
|
17 | if (isString(value)) {
|
18 | if (value.indexOf('T') > 0) {
|
19 | value = new Date(value).getTime();
|
20 | } else {
|
21 |
|
22 |
|
23 |
|
24 | value = new Date(value.replace(/-/gi, '/')).getTime();
|
25 | }
|
26 | }
|
27 | if (isDate(value)) {
|
28 | value = value.getTime();
|
29 | }
|
30 | return value;
|
31 | }
|
32 |
|
33 | const SECOND = 1000;
|
34 | const MINUTE = 60 * SECOND;
|
35 | const HOUR = 60 * MINUTE;
|
36 | const DAY = 24 * HOUR;
|
37 | const MONTH = DAY * 31;
|
38 | const YEAR = DAY * 365;
|
39 |
|
40 | export { SECOND, MINUTE, HOUR, DAY, MONTH, YEAR };
|
41 | type Interval = [string, number];
|
42 | const intervals: Interval[] = [
|
43 | ['HH:mm:ss', SECOND],
|
44 | ['HH:mm:ss', SECOND * 10],
|
45 | ['HH:mm:ss', SECOND * 30],
|
46 | ['HH:mm', MINUTE],
|
47 | ['HH:mm', MINUTE * 10],
|
48 | ['HH:mm', MINUTE * 30],
|
49 | ['HH', HOUR],
|
50 | ['HH', HOUR * 6],
|
51 | ['HH', HOUR * 12],
|
52 | ['YYYY-MM-DD', DAY],
|
53 | ['YYYY-MM-DD', DAY * 4],
|
54 | ['YYYY-WW', DAY * 7],
|
55 | ['YYYY-MM', MONTH],
|
56 | ['YYYY-MM', MONTH * 4],
|
57 | ['YYYY-MM', MONTH * 6],
|
58 | ['YYYY', DAY * 380],
|
59 | ];
|
60 |
|
61 | export function getTickInterval(min: number, max: number, tickCount: number): Interval {
|
62 | const target = (max - min) / tickCount;
|
63 | const idx = bisector((o: Interval) => o[1])(intervals, target) - 1;
|
64 | let interval: Interval = intervals[idx];
|
65 | if (idx < 0) {
|
66 | interval = intervals[0];
|
67 | } else if (idx >= intervals.length) {
|
68 | interval = last(intervals);
|
69 | }
|
70 | return interval;
|
71 | }
|