NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/scale/lib/auto/time.js

177 lines
4.3 KiB
JavaScript
Raw Normal View History

2023-09-14 14:47:11 +08:00
/**
* @fileOverview 计算时间坐标轴
* @author dxq613@gmail.com
*/
var AutoUtil = require('./util');
var isNil = require('@antv/util/lib/type/is-nil');
var MAX_COUNT = 6;
var SNAP_ARRAY = [1, 2, 4, 6, 8, 12];
var MINUTE_MS = 60 * 1000;
var HOUR_MS = 3600 * 1000;
var DAY_MS = 24 * 3600 * 1000;
function getYear(date) {
return new Date(date).getFullYear();
}
function createYear(year) {
return new Date(year, 0, 1).getTime();
}
function getMonth(date) {
return new Date(date).getMonth();
}
function diffMonth(min, max) {
var minYear = getYear(min);
var maxYear = getYear(max);
var minMonth = getMonth(min);
var maxMonth = getMonth(max);
return (maxYear - minYear) * 12 + (maxMonth - minMonth) % 12;
}
function creatMonth(year, month) {
return new Date(year, month, 1).getTime();
}
function diffDay(min, max) {
return Math.ceil((max - min) / DAY_MS);
}
function diffHour(min, max) {
return Math.ceil((max - min) / HOUR_MS);
}
function diffMinus(min, max) {
return Math.ceil((max - min) / (60 * 1000));
}
module.exports = function (info) {
var minInterval = info.minInterval;
var ticks = [];
var min = info.min;
var max = info.max;
var interval = info.interval;
var count; // 如果最大值和最小值相等,则设置最大值大于最小值一天
if (max === min) {
max = min + DAY_MS;
} // 计算间距
if (isNil(interval)) {
var innerTime = max - min;
var dms = DAY_MS; // 天代表的秒
var yms = 365 * dms; // 年代表的秒
interval = parseInt(innerTime / (info.maxCount || MAX_COUNT), 10);
if (minInterval && minInterval > interval) {
interval = minInterval;
}
var yfactor = interval / yms;
var minYear = getYear(min); // 大于半年
if (yfactor > 0.51) {
var year = Math.ceil(yfactor); // interval = year * yms;
var maxYear = getYear(max);
for (var i = minYear; i <= maxYear + year; i = i + year) {
ticks.push(createYear(i));
}
interval = null;
} else if (yfactor > 0.0834) {
// 大于一个月
var month = Math.ceil(yfactor / 0.0834);
var mmMoth = getMonth(min);
var dMonths = diffMonth(min, max);
for (var _i = 0; _i <= dMonths + month; _i = _i + month) {
ticks.push(creatMonth(minYear, _i + mmMoth));
}
interval = null;
} else if (interval > dms * 0.5) {
// 大于一天
var date = new Date(min);
var _year = date.getFullYear();
var _month = date.getMonth(min);
var mday = date.getDate();
var day = Math.ceil(interval / dms);
var ddays = diffDay(min, max);
interval = day * dms;
for (var _i2 = 0; _i2 < ddays + day; _i2 = _i2 + day) {
ticks.push(new Date(_year, _month, mday + _i2).getTime());
}
} else if (interval > HOUR_MS) {
// 大于一个小时
var _date = new Date(min);
var _year2 = _date.getFullYear();
var _month2 = _date.getMonth(min);
var _day = _date.getDate();
var hour = _date.getHours();
var hours = AutoUtil.snapTo(SNAP_ARRAY, Math.ceil(interval / HOUR_MS));
var dHours = diffHour(min, max);
interval = hours * HOUR_MS;
for (var _i3 = 0; _i3 <= dHours + hours; _i3 = _i3 + hours) {
ticks.push(new Date(_year2, _month2, _day, hour + _i3).getTime());
}
} else if (interval > MINUTE_MS) {
// 最小单位是分钟
var dMinus = diffMinus(min, max);
var minutes = Math.ceil(interval / MINUTE_MS);
interval = minutes * MINUTE_MS;
for (var _i4 = 0; _i4 <= dMinus + minutes; _i4 = _i4 + minutes) {
ticks.push(min + _i4 * MINUTE_MS);
}
} else {
if (interval < 1000) {
interval = 1000;
}
min = Math.floor(min / 1000) * 1000;
var dSeconds = Math.ceil((max - min) / 1000);
var seconds = Math.ceil(interval / 1000);
interval = seconds * 1000;
for (var _i5 = 0; _i5 < dSeconds + seconds; _i5 = _i5 + seconds) {
ticks.push(min + _i5 * 1000);
}
}
}
if (!ticks.length) {
min = Math.floor(min / 1000) * 1000;
max = Math.ceil(max / 1000) * 1000;
count = (max - min) / interval;
for (var _i6 = 0; _i6 <= count; _i6++) {
ticks.push(AutoUtil.fixedBase(interval * _i6 + min, interval));
}
}
return {
max: max,
min: min,
interval: interval,
ticks: ticks,
count: ticks.length
};
};