v-gantt-fanuc
Version:
display gantt-like vaule,like use this to order bus schedule.
74 lines (67 loc) • 2.34 kB
JavaScript
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;
}