在JavaScript中查找两个日期数组之间的差异

时间:2015-01-29 09:43:52

标签: javascript arrays date datetime

我试图找到两个Date数组之间的差异,然后将所有不同的日期分成另一个日期数组供以后使用。还有一些我想要它做的功能。有一个变量diffDates。它应该是一个数组,因为它可以保存超过一个月的索引。在diffDates的帮助下,我想填充selectDiffDates

请查看此代码,以便更好,更快,以及在此代码段中实现上述最后功能的任何想法。谢谢。 Link to fiddle

Array.prototype.diff = function(a) {
    return this.filter(function(i) {
        return (a.indexOf(i) < 0);
    });
}

var monthIndex = [0,1,2,3,4,5,6,7,8,9,10,11];
var dMarked=[], dFiltered=[], selectDiffDates = [];
dMarked=["Thu Jan 01 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Feb 05 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Mar 05 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Apr 02 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Jun 04 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Jan 01 2015 00:00:00 GMT+0500 (Pakistan Standard Time)"];

dFiltered=["Thu Jan 08 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Feb 12 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Mar 12 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Apr 09 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu May 07 2015 00:00:00 GMT+0500 (Pakistan Standard Time)",
 "Thu Jun 11 2015 00:00:00 GMT+0500 (Pakistan Standard Time)"];

var dMarkedMonths = [], dFilteredMonths = [];
for(var i=0; i<dMarked.length; i++){
 dMarkedMonths.push( monthIndex[new Date(dMarked[i]).getMonth()]);   
}
for(var i=0; i<dFiltered.length; i++){
 dFilteredMonths.push( monthIndex[new Date(dFiltered[i]).getMonth()]);   
}

console.log(dMarkedMonths);
console.log(dFilteredMonths);
var diffDates = dFilteredMonths.diff( dMarkedMonths );

console.log("Difference: "+diffDates);

for(var d=0; d<dFiltered.length; d++){
    if(new Date(dFiltered[d]).getMonth() == diffDates){
     selectDiffDates.push(dFiltered[d]);   
    }
}
console.log(selectDiffDates);
$("#console").html(selectDiffDates);

1 个答案:

答案 0 :(得分:0)

diffDates是一个数组,因此您不应该将数组与单个月进行比较...而应该检查diffDates数组中是否存在月份:

for(var d=0; d<dFiltered.length; d++){
    if(diffDates.indexOf(new Date(dFiltered[d]).getMonth())>-1){
     selectDiffDates.push(dFiltered[d]);   
    }
}

在演奏部分:请查看更新的小提琴http://jsfiddle.net/q7rmr5uq/3/

您当前的逻辑不符合您的要求。目前,您正在挑选几个月并找到不同的月份,然后从您获得的月份开始重新制作日期。但是,这将跳过所有那些具有相同月份但不同日期或年份的日期。

更好的方法应该包括找出两个日期而不是两个月之间的差异。