Initial commit of akmon project
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// @ts-nocheck
|
||||
import { TimeModeValues } from './type';
|
||||
import { MODE_NAMES, MODE_MAP, MODE_YEAR, MODE_MONTH, MODE_DATE, MODE_HOUR, MODE_MINUTE, MODE_SECOND } from './constant'
|
||||
|
||||
|
||||
/**
|
||||
* 根据给定的模式返回具有意义的时间列数组。
|
||||
* @param {number} mode - 表示时间模式的位掩码。
|
||||
* @returns {TimeModeValues[]} - 返回具有意义的时间列名称数组。
|
||||
*/
|
||||
export function getMeaningColumn(mode : any) : TimeModeValues[] {
|
||||
// 初始化结果数组
|
||||
const res : TimeModeValues[] = [];
|
||||
|
||||
let _mode:number = 0;
|
||||
if(typeof mode == 'string') {
|
||||
MODE_MAP.forEach((value, key) => {
|
||||
if((mode as string).includes(key)) {
|
||||
_mode = _mode | value;
|
||||
}
|
||||
})
|
||||
} else if(typeof mode == 'number') {
|
||||
_mode = mode as number
|
||||
}
|
||||
|
||||
if(_mode <= 0) {
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
// 定义对应的位掩码数组
|
||||
const modeBitmasks = [MODE_YEAR, MODE_MONTH, MODE_DATE, MODE_HOUR, MODE_MINUTE, MODE_SECOND];
|
||||
|
||||
// 查找被设置的位掩码
|
||||
const activeBitmasks = modeBitmasks.filter(bitmask => (_mode & bitmask) != 0);
|
||||
|
||||
// 如果没有位掩码被设置,返回空数组
|
||||
if (activeBitmasks.length == 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// 初始化最长连续子序列和当前连续子序列
|
||||
let longestSequence : number[] = [];
|
||||
let currentSequence : number[] = [];
|
||||
|
||||
// 遍历所有被设置的位掩码
|
||||
activeBitmasks.forEach(bitmask => {
|
||||
// 如果当前序列为空或当前位掩码是前一个位掩码的两倍,则将其加入当前序列
|
||||
if (currentSequence.length == 0 || bitmask == currentSequence[currentSequence.length - 1] * 2) {
|
||||
currentSequence.push(bitmask);
|
||||
} else {
|
||||
// 如果当前序列长度大于最长序列长度,则更新最长序列
|
||||
if (currentSequence.length > longestSequence.length) {
|
||||
longestSequence = currentSequence;
|
||||
}
|
||||
// 开始新的序列
|
||||
currentSequence = [bitmask];
|
||||
}
|
||||
});
|
||||
|
||||
// 检查最后一个序列是否是最长的
|
||||
if (currentSequence.length > longestSequence.length) {
|
||||
longestSequence = currentSequence;
|
||||
}
|
||||
|
||||
// 将最长连续子序列的位掩码转换为对应的模式名并返回
|
||||
return longestSequence.map(bitmask => MODE_NAMES[modeBitmasks.indexOf(bitmask)]);
|
||||
}
|
||||
Reference in New Issue
Block a user