javascript - 测试日期集合在哪些范围内不重叠

标签 javascript jquery date math momentjs

我编写了一个脚本来使用 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}
]

示例图片: enter image description here

最佳答案

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

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 中

FIDDLE

关于javascript - 测试日期集合在哪些范围内不重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665558/

相关文章:

r - 如何在 R data.table 中将日期从一个变量复制到另一个变量而不丢失日期格式?

javascript - 我应该如何在 HTML 中显示数字以便以后在 javascript 中计算

javascript - 在同一个按钮上滑入和滑出内容

javascript - 选择单选按钮后调用 JSON

javascript - Ajax 响应成功后启动 jQuery 行?

jquery解析xml并按元素值分组

javascript - 当传递给 "new Date"时,javascript 中 yyyy-mm-dd 和 yyyy/mm/dd 的结果不同

perl - 如何在 Perl 中找到比给定日期早三天的日期?

javascript - 我应该如何组织一个对象以尽可能地保持一切分离?

javascript - 如何在exceljs中自动调整列宽