Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中查找两个日期数组之间的差异_Javascript_Arrays_Date_Datetime - Fatal编程技术网

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

在JavaScript中查找两个日期数组之间的差异,javascript,arrays,date,datetime,Javascript,Arrays,Date,Datetime,我试图找出两个Date数组之间的差异,然后将所有不同的日期分离到另一个日期数组中,供以后使用。还有一点更多的功能,我希望它做。有一个变量diffDates。它应该是一个数组,因为它可以保存超过一个月的索引。在diffDates的帮助下,我想填充selectDiffDates 请检查这段代码,使其更好,可能更快,以及在这段代码中实现上述最后一个功能的任何想法。谢谢 Array.prototype.diff=函数(a){ 返回此.filter(函数(i){ 返回值(a.indexOf(i)

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

请检查这段代码,使其更好,可能更快,以及在这段代码中实现上述最后一个功能的任何想法。谢谢

Array.prototype.diff=函数(a){
返回此.filter(函数(i){
返回值(a.indexOf(i)<0);
});
}
var monthIndex=[0,1,2,3,4,5,6,7,8,9,10,11];
var dMarked=[],Dfilted=[],selectDiffDates=[];
dMarked=[“2015年1月1日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年2月5日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年3月5日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年4月2日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年6月4日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年1月1日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”;
d过滤=[“2015年1月8日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年2月12日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年3月12日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年4月9日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年5月7日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”,
“2015年6月11日星期四00:00:00 GMT+0500(巴基斯坦标准时间)”;
var dMarkedMonths=[],dFilteredMonths=[];

对于(var i=0;i
diffDates
是一个数组,因此您不应该将数组与单个月份进行比较……而是应该检查
diffDates
数组中是否存在月份:

for(var d=0; d<dFiltered.length; d++){
    if(diffDates.indexOf(new Date(dFiltered[d]).getMonth())>-1){
     selectDiffDates.push(dFiltered[d]);   
    }
}
for(变量d=0;d-1){
选择DiffDates.push(数据过滤[d]);
}
}
在表演部分:请检查更新的小提琴

您当前的逻辑不符合您的要求。当前,您正在选择月份并查找不同的月份,然后从您得到的月份中重新创建日期。但这将跳过所有具有相同月份但不同日期或年份的日期


更好的满足您需求的方法应该包括查找两个日期之间的差异,而不是两个月之间的差异。

diffDates
应将每个元素与经过筛选的
d的每个元素进行比较。这就是上面代码所做的吗?是的,因为diffDates是一个月数组。请提供任何使此代码有效的提示k更快?因为这将成为凌乱和繁琐代码的一部分:)我从你的个人资料中得到一个提示,我正在大量推送我的代码。谢谢你读了那篇帖子里的评论吗???你真的在和IE8做基准测试?亲爱的我。在Chrome和Firefox的最新版本中,推送速度都显著加快,实际上在IE11中也是一个不错的选择。你的绩效论证可能在5年前有效
for(var d=0; d<dFiltered.length; d++){
    if(diffDates.indexOf(new Date(dFiltered[d]).getMonth())>-1){
     selectDiffDates.push(dFiltered[d]);   
    }
}