1 | import { DAY, HOUR, MINUTE, MONTH, SECOND, YEAR } from '../util/time';
|
2 | function getYear(date) {
|
3 | return new Date(date).getFullYear();
|
4 | }
|
5 | function createYear(year) {
|
6 | return new Date(year, 0, 1).getTime();
|
7 | }
|
8 | function getMonth(date) {
|
9 | return new Date(date).getMonth();
|
10 | }
|
11 | function diffMonth(min, max) {
|
12 | var minYear = getYear(min);
|
13 | var maxYear = getYear(max);
|
14 | var minMonth = getMonth(min);
|
15 | var maxMonth = getMonth(max);
|
16 | return (maxYear - minYear) * 12 + ((maxMonth - minMonth) % 12);
|
17 | }
|
18 | function creatMonth(year, month) {
|
19 | return new Date(year, month, 1).getTime();
|
20 | }
|
21 | function diffDay(min, max) {
|
22 | return Math.ceil((max - min) / DAY);
|
23 | }
|
24 | function diffHour(min, max) {
|
25 | return Math.ceil((max - min) / HOUR);
|
26 | }
|
27 | function diffMinus(min, max) {
|
28 | return Math.ceil((max - min) / (60 * 1000));
|
29 | }
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | export default function timePretty(cfg) {
|
36 | var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval, tickCount = cfg.tickCount;
|
37 | var tickInterval = cfg.tickInterval;
|
38 | var ticks = [];
|
39 |
|
40 | if (!tickInterval) {
|
41 | tickInterval = (max - min) / tickCount;
|
42 |
|
43 | if (minTickInterval && tickInterval < minTickInterval) {
|
44 | tickInterval = minTickInterval;
|
45 | }
|
46 | }
|
47 | var minYear = getYear(min);
|
48 |
|
49 | if (tickInterval > YEAR) {
|
50 | var maxYear = getYear(max);
|
51 | var yearInterval = Math.ceil(tickInterval / YEAR);
|
52 | for (var i = minYear; i <= maxYear + yearInterval; i = i + yearInterval) {
|
53 | ticks.push(createYear(i));
|
54 | }
|
55 | }
|
56 | else if (tickInterval > MONTH) {
|
57 |
|
58 | var monthInterval = Math.ceil(tickInterval / MONTH);
|
59 | var mmMoth = getMonth(min);
|
60 | var dMonths = diffMonth(min, max);
|
61 | for (var i = 0; i <= dMonths + monthInterval; i = i + monthInterval) {
|
62 | ticks.push(creatMonth(minYear, i + mmMoth));
|
63 | }
|
64 | }
|
65 | else if (tickInterval > DAY) {
|
66 |
|
67 | var date = new Date(min);
|
68 | var year = date.getFullYear();
|
69 | var month = date.getMonth();
|
70 | var mday = date.getDate();
|
71 | var day = Math.ceil(tickInterval / DAY);
|
72 | var ddays = diffDay(min, max);
|
73 | for (var i = 0; i < ddays + day; i = i + day) {
|
74 | ticks.push(new Date(year, month, mday + i).getTime());
|
75 | }
|
76 | }
|
77 | else if (tickInterval > HOUR) {
|
78 |
|
79 | var date = new Date(min);
|
80 | var year = date.getFullYear();
|
81 | var month = date.getMonth();
|
82 | var day = date.getDate();
|
83 | var hour = date.getHours();
|
84 | var hours = Math.ceil(tickInterval / HOUR);
|
85 | var dHours = diffHour(min, max);
|
86 | for (var i = 0; i <= dHours + hours; i = i + hours) {
|
87 | ticks.push(new Date(year, month, day, hour + i).getTime());
|
88 | }
|
89 | }
|
90 | else if (tickInterval > MINUTE) {
|
91 |
|
92 | var dMinus = diffMinus(min, max);
|
93 | var minutes = Math.ceil(tickInterval / MINUTE);
|
94 | for (var i = 0; i <= dMinus + minutes; i = i + minutes) {
|
95 | ticks.push(min + i * MINUTE);
|
96 | }
|
97 | }
|
98 | else {
|
99 |
|
100 | var interval = tickInterval;
|
101 | if (interval < SECOND) {
|
102 | interval = SECOND;
|
103 | }
|
104 | var minSecond = Math.floor(min / SECOND) * SECOND;
|
105 | var dSeconds = Math.ceil((max - min) / SECOND);
|
106 | var seconds = Math.ceil(interval / SECOND);
|
107 | for (var i = 0; i < dSeconds + seconds; i = i + seconds) {
|
108 | ticks.push(minSecond + i * SECOND);
|
109 | }
|
110 | }
|
111 |
|
112 |
|
113 | if (ticks.length >= 512) {
|
114 | console.warn("Notice: current ticks length(" + ticks.length + ") >= 512, may cause performance issues, even out of memory. Because of the configure \"tickInterval\"(in milliseconds, current is " + tickInterval + ") is too small, increase the value to solve the problem!");
|
115 | }
|
116 | return ticks;
|
117 | }
|
118 |
|
\ | No newline at end of file |