首页 > 解决方案 > 日期期间的计数

问题描述

我有一个这样的日期列表:

[ "2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25", ]

我需要从这个列表中提取日期在日期升序中相同的范围。

例如,我的输出必须是:

{date: "2020-08-20", period: 1-2}, {date: "2020-08-21", period: 3-3}, {date: "2020-08-25", period: 4-4},
{date: "2020-08-25", period: 5-7}

或者只是:

{date: "2020-08-20", period: 1-2},{date: "2020-08-25", period: 5-7}

谁能帮我?我尝试对此使用库momentjs,但它不起作用:(

谢谢你的帮助

标签: javascripttypescriptdate

解决方案


考虑到您的排序日期示例,我会选择 2 指针解决方案:

对于场景 1:

var data = ["2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25"];

let i = 0, j = 1;
var res = [];
while (i < data.length) {
    if (data[i] == data[j]) {
        j += 1;
        //scan rest
        while (data[i] == data[j]) {
            j += 1;
        }
        j -= 1;
        res.push({ date: data[i], period: (i + 1) + "-" + (j + 1) });
        i = j + 1;
        j = i + 1;
    } else {
        res.push({ date: data[i], period: (i + 1) + "-" + (i + 1) });
        i += 1;
        j += 1;
    }

}
console.log(res);

对于场景 2:

var data = ["2020-08-20", "2020-08-20", "2020-08-21", "2020-08-24", "2020-08-25", "2020-08-25", "2020-08-25"];

let i = 0, j = 1;
var res = [];
while (i < data.length) {
    if (data[i] == data[j]) {
        j += 1;
        while (data[i] == data[j]) {
            j += 1;
        }
        j -= 1;
        res.push({ date: data[i], period: (i + 1) + "-" + (j + 1) });
        i = j + 1;
        j = i + 1;
    } else {
        i += 1;
        j += 1;
    }

}
console.log(res);


推荐阅读