| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // @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)]);
- }
|