import dayjs from 'dayjs'
|
|
export const scaleList = [1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30, 60, 120, 180,
|
240,
|
360, 720, 1440
|
]
|
/**
|
* 验证是否合法scale值
|
*
|
* @export
|
* @param {number} scale
|
* @returns
|
*/
|
export function validateScale(scale) {
|
if (!scaleList.includes(scale)) {
|
throw new RangeError(
|
`错误的scale值,输入值为${scale},可用的scale值为${scaleList.join(',')}`)
|
}
|
return true;
|
}
|
|
/**
|
* 根据给出的scale 和 start 时间 计算出用于计算和生成图表的启始时间
|
* eg:Start 为10:10分 刻度为60,getBeginTimeOfTimeLine函数给出的时间 为 10:00分
|
* 刻度为5,getBeginTimeOfTimeLine函数给出的时间 为 10:10分
|
* 刻度为3,getBeginTimeOfTimeLine函数给出的时间 为 10:09分
|
*
|
* @export
|
* @param {dayjs} start
|
* @param {number} [scale=60]
|
* @returns {dayjs}计算的启始时间
|
*/
|
export function getBeginTimeOfTimeLine(start, scale = 60) {
|
validateScale(scale)
|
let timeBlocks;
|
let startClone = start.clone();
|
let rate = scale / 60;
|
if (scale > 60) {
|
timeBlocks = Math.floor(start.hour() / rate);
|
startClone = startClone.hour(timeBlocks * rate).minute(0).second(0);
|
} else {
|
timeBlocks = Math.floor(start.minute() / scale);
|
startClone = startClone.minute(timeBlocks * scale).second(0);
|
}
|
|
return startClone;
|
}
|
/**
|
* 根据所给 scale计算 两个时间差一共可以分成多少个刻度
|
* 注意: timdStart 并不是实际的开始计算的时间,会通过getBeginTimeOfTimeLine 函数计算出分割开始时间
|
*
|
* @export
|
* @param {dayjs} timeStart 开始时间
|
* @param {dayjs} timeEnd 结束时间
|
* @param {number} [scale=60] 分割的刻度
|
* @returns 时间块数量
|
*/
|
export function calcScalesAbout2Times(timeStart, timeEnd, scale = 60) {
|
if (timeStart.isAfter(timeEnd)) {
|
throw new TypeError('错误的参数顺序,函数calcScalesAbout2Times的第一个时间参数必须大于第二个时间参数')
|
}
|
|
validateScale(scale);
|
|
let startBlocksTime = getBeginTimeOfTimeLine(timeStart, scale);
|
let count = 0;
|
while (!startBlocksTime.isAfter(timeEnd)) {
|
count++;
|
startBlocksTime = startBlocksTime.add(scale, "minute")
|
}
|
|
return count;
|
|
}
|