查找日期范围内的可用日期

布朗森

假设有一个显示事件日期可用性的系统。我们有一个主要的日期范围,所有活动都可以进行。事件本身也可以是日期范围。

例子:

[Date X]========================================[Date Y]
        [A]=====[A]        [B]=====[B][C]=====[C]
        [ Event A ][ Open ][ Event B ][ Event C ]

日期X和日期Y是事件发生的主要日期范围。A,B和C是已安排的事件。

如何有效检索开放日期范围?

范例2:

var rangeStart = new Date("04-01-2016");
var rangeEnd = new Date("04-31-2016");

var eventAStart = new Date("04-01-2016");
var eventAEnd = new Date("04-06-2016");

var eventBStart = new Date("04-15-2016");
var eventBEnd = new Date("04-30-2016");

我需要返回类似的内容:

var availableRangeStart = "04-07-2015";
var availableRangeEnd = "04-14-2016";

因为这些是主范围中的日期,没有与“事件”范围重叠。

确切地说,我正在尝试做的事情:

我的应用程序是一个旅行计划者,用户在其中设置旅行日期,然后将具有自己日期的其他目的地添加到该旅行中。(用户将在4月1日至4月30日前往欧洲旅行,他们将在4月1日至4月6日在巴黎旅行,然后将在4月15日至4月30日在伦敦旅行)。但是从4月7日到4月14日,用户尚未计划任何事情。我试图返回这些日期,以便在它们添加新目的地时预先填充日期。

亭子

这是从免费期间/免费期间返回的解决方案:

// Helper function
function addDays(date, days) {
    return new Date(date.getTime() + days * 24*60*60*1000);
}

// Main function
function gaps(period, events) {
    events = events.slice(0).filter(function (a) {
        // Exclude events which are outside the main period
        return a.to >= period.from && a.from <= period.to;
    }).sort(function (a, b) {
        // Sort events by their starting date
        return a.from - b.from;
    });
    var result = events.reduce(function (result, curr) {
        if (curr.from - result.free > 0) {
            // gap found
            result.gaps.push({
                from: result.free, 
                to:   addDays(curr.from, -1)
            });
        }
        if (curr.to - result.free >= 0) {
            // first free day is after this event
            result.free = addDays(curr.to, 1)
        }
        return result;
    }, { gaps: [], free: period.from } );
    // Potentially add gap between last event end period-end
    if (period.to - result.free >= 0) {
        result.gaps.push({
            from: result.free,
            to:   period.to
        });
    }
    return result.gaps;
}


// Sample data:

var period = {
    from: new Date('2016-01-01'),
    to: new Date('2016-12-31')
};

var events = [
    { from: new Date('2016-02-01'), to: new Date('2016-02-29') },
    { from: new Date('2016-03-01'), to: new Date('2016-03-15') },
    { from: new Date('2016-04-16'), to: new Date('2016-04-30') },
];

// Call to function
var res = gaps(period, events);

// Output in snippet
document.write('<pre>' + JSON.stringify(res, null, 4));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找日期范围内的可用日期

来自分类Dev

查找日期在范围内

来自分类Dev

查找日期范围内的行数-MySQL

来自分类Dev

查找日期范围内的NA值

来自分类Dev

在指定的日期范围内如何查找给定的日期

来自分类Dev

PHP:查找预订日期是否在指定的日期范围内

来自分类Dev

使用 XSLT 查找日期是否在日期范围内

来自分类Dev

SUMIF 或 INDEX - 查找满足日期范围内日期的总和

来自分类Dev

仅获取某个日期范围内的可用产品

来自分类Dev

在后缀日期范围内查找文件

来自分类Dev

Excel公式查找给定范围内的日期(整列)

来自分类Dev

SQL 查找日期是否在一个范围内

来自分类Dev

SQL 在 31 天的时间范围内查找日期

来自分类Dev

查找日期范围内的工作日

来自分类Dev

从日期范围查找可用的房间

来自分类Dev

SQL显示日期范围内30天内的最接近可用日期

来自分类Dev

标记范围内的日期

来自分类Dev

日期范围内的天数

来自分类Dev

在日期范围内搜索

来自分类Dev

检查日期是否在日期范围内

来自分类Dev

处理日期范围内的NULL日期

来自分类Dev

过滤或检查日期范围内的日期

来自分类Dev

查找给定的日期范围是否在MySQL中的另一个日期范围内

来自分类Dev

查找给定的日期范围是否在MySQL中的另一个日期范围内

来自分类Dev

MySQL选择日期范围内的所有日期,即使当天没有可用数据

来自分类Dev

O(1)在日期范围内查找日期的方式,不包括周末

来自分类Dev

查找与范围内的设置日期相交的最小开始日期

来自分类Dev

在 Python 中无需过滤即可在日期范围内查找最大日期

来自分类Dev

查找日期范围内存在的天数

Related 相关文章

热门标签

归档