Javascript 如何检查主干集合中的日期相交?

Javascript 如何检查主干集合中的日期相交?,javascript,backbone.js,Javascript,Backbone.js,我有一个主干集合,由具有以下属性的模型组成: { startTime: Date('...'), endTime: Date('...') } 当我添加一个新模型时,我必须检查添加的和存在的模型之间是否有日期交叉点 例如: var startTime = new Date(); var endTime = new Date(new Date().setHours(1)); if (!this.collection.check({startTime: startTime, endTim

我有一个主干集合,由具有以下属性的模型组成:

{
  startTime: Date('...'),
  endTime: Date('...')
}
当我添加一个新模型时,我必须检查添加的和存在的模型之间是否有日期交叉点

例如:

var startTime = new Date();
var endTime = new Date(new Date().setHours(1));

if (!this.collection.check({startTime: startTime, endTime })) {
   this.create({startTime: startTime, endTime });
} 

最好的方法是什么?

您可以测试集合中的每个模型,以检查未来日期是否与现有时间间隔重叠。例如,使用基于中答案的条件

var C=Backbone.Collection.extend({
检查:功能(opts){
//如果给定的间隔与任何模型重叠,则返回true
var start=opts.startTime,
结束=opts.endTime;
返回此.any(函数(模型){
//如果给定的间隔重叠,则返回true

return!((model.get('startTime')>=end)| |(model.get('endTime')=startdate&&startD=startD&&startdate感谢您的响应。我应该在集合中还是在模型的validate方法中检查此项?我们仍然可以访问模型中集合的父项。而且您的子句中似乎有错误(改用|&)我会让集合处理检查,因为它处理创建,可能在创建方法上有一个覆盖。条件是正确的:如果model.end在开始日期之前,或者model.start在结束日期之后,那么它们不会重叠。您的检查日期顺序是否也像这里一样,或者我需要添加一些条件?这相当于这是Bergi和Bungus给出的答案,您不需要添加任何内容
var C = Backbone.Collection.extend({
    check: function(opts) {
       // returns true if the given interval overlaps with any model
        var start = opts.startTime,
            end = opts.endTime;

        return this.any(function(model) {
            // returns true if the given interval overlaps
            return !((model.get('startTime')>=end) || (model.get('endTime')<=start));
        });
    }
});
var C = Backbone.Collection.extend({
    check: function(opts) {
        var startdate = opts.startTime,
            enddate = opts.endTime;

        return this.any(function(model) {
            var startD = model.get('startTime'),
                endD = model.get('endTime');

            return (startD >= startdate && startD <= enddate) || 
                    (startdate >= startD && startdate <= endD);
        });
    }
});