【问题标题】:Test in which ranges the collection of dates aren't overlapping测试日期集合在哪些范围内不重叠
【发布时间】:2015-06-05 11:37:25
【问题描述】:

我编写了一个脚本来使用 javascript 中的数据集呈现时间线。 但是我必须标记没有找到信息的区域(图像中的黄色)。 我绝对不知道如何在数据集中没有信息的情况下获取范围。 (我使用 momentjs 进行日期计算)

示例数据集:

data: [
    {id: 1, lane: 1, start: 05-02-2006, end: 09-09-2008},
    {id: 2, lane: 2, start: 01-01-2008, end: 31-07-2010},
    {id: 3, lane: 3, start: 15-12-2013, end: 12-02-2016}
]

示例图片:

【问题讨论】:

    标签: javascript jquery date math momentjs


    【解决方案1】:

    我会创建一个新数组并填充空白,就像这样

    var dates = [];
    
    for (var i=0; i<data.length; i++) {
        var now       = data[i],
            thisStart = parseDate(now.start),
            thisEnd   = parseDate(now.end),
            prevEnd   = data[i-1] ? parseDate(data[i-1].end) : null;
    
        if ( prevEnd && prevEnd <= thisStart ) {
            dates.push({id: i + 0.5, lane: 0, start: prevEnd, end: thisStart});
        }
    
        dates.push({id : now.id, lane: now.lane, start: thisStart, end: thisEnd});
    }
    

    你最终会得到一个这样的数组

    dates : [
        {id: 1, lane: 1, start: "2006-02-04T23:00:00.000Z", end: "2008-09-08T22:00:00.000Z"},
        {id: 2, lane: 2, start: "2007-12-31T23:00:00.000Z", end: "2010-07-30T22:00:00.000Z"},
        {id: 2.5, lane: 0, start: "2010-07-30T22:00:00.000Z", end: "2013-12-14T23:00:00.000Z"},
        {id: 3, lane: 3, start: "2013-12-14T23:00:00.000Z", end: "2016-02-11T23:00:00.000Z"}
    ]
    

    请注意,我用 id if .5 和lane 0 标记了填充空隙的对象,您可以在那里做任何您想做的事情,只要您在创建布局时可以识别它。

    我还创建了一个parseDate 函数,它所做的只是将日期解析为有效的日期对象,它包含在下面的小提琴中

    FIDDLE

    【讨论】:

    • 在我的示例中,日期是有序的,但并非总是如此。像这样(如下)的数据集也是可能的: data: [ {id: 1, lane: 2, start: 01-01-2008, end: 31-07-2010}, {id: 2, lane: 1,开始:05-02-2006,结束:09-09-2008},{id:3,车道:3,开始:15-12-2013,结束:12-02-2016}]
    • 然后先按日期对数组进行排序
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多