①不用第三方库,补全缺失日期,补齐数据,0站位
// 不完整的日期数组
const dateArr = [
{ date: '2021-12-25', cnt: 12 },
{ date: '2021-12-28', cnt: 7 },
{ date: '2021-12-30', cnt: 9 },
{ date: '2022-01-02', cnt: 4 },
{ date: '2022-01-03', cnt: 4 },
];
const getNewDate = (time) => {
let date = new Date(time).getTime() + 1000 * 60 * 60 * 24;
let Y = new Date(date).getFullYear() + '-';
let M = (new Date(date).getMonth() + 1 < 10 ? '0' + (new Date(date).getMonth() + 1) : new Date(date).getMonth() + 1) + '-';
let D = new Date(date).getDate() < 10 ? '0' + new Date(date).getDate() : new Date(date).getDate();
return Y + M + D;
};
const pathDate = (dateArr) => {
// 新日期数组
let newDateArr = [];
newDateArr.push(dateArr[0], dateArr[dateArr.length - 1]);
let startDate = newDateArr[newDateArr.length - 2].date;
let endDate = newDateArr[newDateArr.length - 1].date;
let startStamp = new Date(startDate).getTime();
let endStamp = new Date(endDate).getTime();
let diffCounts = Math.abs(startStamp - endStamp) / 1000 / 60 / 60 / 24;
// 得出倒数第二天和倒数第一天的相差天数,依次递减,直到相差1天,表示是相邻的两天
for (let index = diffCounts; index > 1; index--) {
// 根据时间戳得出应该往后加的日期
getNewDate(newDateArr[newDateArr.length - 2].date);
// 把新的日期从倒数第二个位置追加到新日期数组
newDateArr.splice(newDateArr.length - 1, 0, {
date: getNewDate(newDateArr[newDateArr.length - 2].date),
cnt: 0,
});
}
newDateArr.forEach((newItem) => {
dateArr.forEach((oldItem) => {
if (newItem.date === oldItem.date) {
newItem.cnt = oldItem.cnt;
}
});
});
console.log('原来的缺失日期',dateArr);
console.log('补全后的日期',newDateArr);
};
pathDate(dateArr);
输出结果:

②使用dayjs的方式
const dateArr = [
{ date: '2021-12-25', cnt: 12 },
{ date: '2021-12-28', cnt: 7 },
{ date: '2021-12-30', cnt: 9 },
{ date: '2022-01-02', cnt: 4 },
{ date: '2022-01-03', cnt: 4 },
];
const pathDate = (dateArr) => {
let newDateArr = [];
newDateArr.push(dateArr[0], dateArr[dateArr.length - 1]);
let startDate = newDateArr[newDateArr.length - 2];
let endDate = newDateArr[newDateArr.length - 1];
let diffCounts = dayjs(endDate.date).diff(startDate.date, 'day');
for (let index = diffCounts; index > 1; index--) {
let a = dayjs(newDateArr[newDateArr.length - 2].date)
.add(1, 'day')
.format('YYYY-MM-DD');
newDateArr.splice(newDateArr.length - 1, 0, {
date: a,
cnt: 0,
});
}
dateArr.forEach((it) => {
newDateArr.forEach((item) => {
if (item.date === it.date) {
item.cnt = it.cnt;
}
});
});
console.log(newDateArr);
};
pathDate(dateArr);