UNPKG

4.59 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var time_1 = require("../util/time");
4function getYear(date) {
5 return new Date(date).getFullYear();
6}
7function createYear(year) {
8 return new Date(year, 0, 1).getTime();
9}
10function getMonth(date) {
11 return new Date(date).getMonth();
12}
13function diffMonth(min, max) {
14 var minYear = getYear(min);
15 var maxYear = getYear(max);
16 var minMonth = getMonth(min);
17 var maxMonth = getMonth(max);
18 return (maxYear - minYear) * 12 + ((maxMonth - minMonth) % 12);
19}
20function creatMonth(year, month) {
21 return new Date(year, month, 1).getTime();
22}
23function diffDay(min, max) {
24 return Math.ceil((max - min) / time_1.DAY);
25}
26function diffHour(min, max) {
27 return Math.ceil((max - min) / time_1.HOUR);
28}
29function diffMinus(min, max) {
30 return Math.ceil((max - min) / (60 * 1000));
31}
32/**
33 * 计算 time 的 ticks,对 month, year 进行 pretty 处理
34 * @param cfg 度量的配置项
35 * @returns 计算后的 ticks
36 */
37function timePretty(cfg) {
38 var min = cfg.min, max = cfg.max, minTickInterval = cfg.minTickInterval, tickCount = cfg.tickCount;
39 var tickInterval = cfg.tickInterval;
40 var ticks = [];
41 // 指定 tickInterval 后 tickCount 不生效,需要重新计算
42 if (!tickInterval) {
43 tickInterval = (max - min) / tickCount;
44 // 如果设置了最小间距,则使用最小间距
45 if (minTickInterval && tickInterval < minTickInterval) {
46 tickInterval = minTickInterval;
47 }
48 }
49 var minYear = getYear(min);
50 // 如果间距大于 1 年,则将开始日期从整年开始
51 if (tickInterval > time_1.YEAR) {
52 var maxYear = getYear(max);
53 var yearInterval = Math.ceil(tickInterval / time_1.YEAR);
54 for (var i = minYear; i <= maxYear + yearInterval; i = i + yearInterval) {
55 ticks.push(createYear(i));
56 }
57 }
58 else if (tickInterval > time_1.MONTH) {
59 // 大于月时
60 var monthInterval = Math.ceil(tickInterval / time_1.MONTH);
61 var mmMoth = getMonth(min);
62 var dMonths = diffMonth(min, max);
63 for (var i = 0; i <= dMonths + monthInterval; i = i + monthInterval) {
64 ticks.push(creatMonth(minYear, i + mmMoth));
65 }
66 }
67 else if (tickInterval > time_1.DAY) {
68 // 大于天
69 var date = new Date(min);
70 var year = date.getFullYear();
71 var month = date.getMonth();
72 var mday = date.getDate();
73 var day = Math.ceil(tickInterval / time_1.DAY);
74 var ddays = diffDay(min, max);
75 for (var i = 0; i < ddays + day; i = i + day) {
76 ticks.push(new Date(year, month, mday + i).getTime());
77 }
78 }
79 else if (tickInterval > time_1.HOUR) {
80 // 大于小时
81 var date = new Date(min);
82 var year = date.getFullYear();
83 var month = date.getMonth();
84 var day = date.getDate();
85 var hour = date.getHours();
86 var hours = Math.ceil(tickInterval / time_1.HOUR);
87 var dHours = diffHour(min, max);
88 for (var i = 0; i <= dHours + hours; i = i + hours) {
89 ticks.push(new Date(year, month, day, hour + i).getTime());
90 }
91 }
92 else if (tickInterval > time_1.MINUTE) {
93 // 大于分钟
94 var dMinus = diffMinus(min, max);
95 var minutes = Math.ceil(tickInterval / time_1.MINUTE);
96 for (var i = 0; i <= dMinus + minutes; i = i + minutes) {
97 ticks.push(min + i * time_1.MINUTE);
98 }
99 }
100 else {
101 // 小于分钟
102 var interval = tickInterval;
103 if (interval < time_1.SECOND) {
104 interval = time_1.SECOND;
105 }
106 var minSecond = Math.floor(min / time_1.SECOND) * time_1.SECOND;
107 var dSeconds = Math.ceil((max - min) / time_1.SECOND);
108 var seconds = Math.ceil(interval / time_1.SECOND);
109 for (var i = 0; i < dSeconds + seconds; i = i + seconds) {
110 ticks.push(minSecond + i * time_1.SECOND);
111 }
112 }
113 // 最好是能从算法能解决这个问题,但是如果指定了 tickInterval,计算 ticks,也只能这么算,所以
114 // 打印警告提示
115 if (ticks.length >= 512) {
116 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!");
117 }
118 return ticks;
119}
120exports.default = timePretty;
121//# sourceMappingURL=time-pretty.js.map
\No newline at end of file