开发中或是echart图表轴数据计算时可以使用moment获取某个时间段之间的多少年,月,季度列表,希望这样传入:
console.log(getRangeTimeByUnit(["2015-08","2020-09"], "month"));
console.log(getRangeTimeByUnit(["2017","2019"], "year"));
console.log(getRangeTimeByUnit(["2015-09","2020-05"], "quarter"));
传入2个时间点区间,并带入单位,可以得到期间所有对应单位时间点数组:
输出
[
'2015-08', '2015-09', '2015-10', '2015-11',
'2015-12', '2016-01', '2016-02', '2016-03',
'2016-04', '2016-05', '2016-06', '2016-07',
'2016-08', '2016-09', '2016-10', '2016-11',
'2016-12', '2017-01', '2017-02', '2017-03',
'2017-04', '2017-05', '2017-06', '2017-07',
'2017-08', '2017-09', '2017-10', '2017-11',
'2017-12', '2018-01', '2018-02', '2018-03',
'2018-04', '2018-05', '2018-06', '2018-07',
'2018-08', '2018-09', '2018-10', '2018-11',
'2018-12', '2019-01', '2019-02', '2019-03',
'2019-04', '2019-05', '2019-06', '2019-07',
'2019-08', '2019-09', '2019-10', '2019-11',
'2019-12', '2020-01', '2020-02', '2020-03',
'2020-04', '2020-05', '2020-06', '2020-07',
'2020-08', '2020-09'
]
输出
[ '2017', '2018', '2019' ]
输出
[
'2015年3季度', '2015年4季度',
'2016年1季度', '2016年2季度',
'2016年3季度', '2016年4季度',
'2017年1季度', '2017年2季度',
'2017年3季度', '2017年4季度',
'2018年1季度', '2018年2季度',
'2018年3季度', '2018年4季度',
'2019年1季度', '2019年2季度',
'2019年3季度', '2019年4季度',
'2020年1季度', '2020年2季度'
]
实现:
import moment, { Moment } from 'moment';
/**
* getRangeTimeByUnit 根据时间段和单位获取时间段之间包括时间点本身的所有时间点
* @param range [Moment, Moment]
* @param unit 月 季度 年
* @returns time
*/
export const getRangeTimeByUnit: (
range: [Moment, Moment],
timeUnit: 'month' | 'quarter' | 'year'
) => string[] = (range, timeUnit = 'month') => {
const start = moment(range[0]);
const end = moment(range[1]);
if (timeUnit === 'year') {
const arr = [start.format('YYYY')];
const diff = moment(end.format('YYYY')).diff(moment(start).format('YYYY'), 'year'); //需要转为年格式再进行diff
for (let i = 1; i <= diff; i++) {
arr.push(start.add(1, 'year').format('YYYY'));
}
return arr;
}
if (timeUnit === 'month') {
const arr = [start.format('YYYY-MM')];
const diff = moment(end.format('YYYY-MM')).diff(moment(start).format('YYYY-MM'), 'month');//需要转为年月格式再进行diff
for (let i = 1; i <= diff; i++) {
arr.push(start.add(1, 'month').format('YYYY-MM'));
}
return arr;
}
if (timeUnit === 'quarter') {
const arr = [start.format('YYYY年Q季度')];
const diff = moment(end.startOf('quarter')).diff(moment(start).startOf('quarter'), 'quarter');
for (let i = 1; i <= diff; i++) {
arr.push(start.add(1, 'quarter').format('YYYY年Q季度'));
}
return arr;
}
return [];
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。