Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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
如何从jquery或javascript中的静态日期数组中获取日期范围_Javascript_Jquery_Date - Fatal编程技术网

如何从jquery或javascript中的静态日期数组中获取日期范围

如何从jquery或javascript中的静态日期数组中获取日期范围,javascript,jquery,date,Javascript,Jquery,Date,我想从数组的静态日期创建日期范围。 以下是我想要的示例: var collDates = [ "2017/01/01", "2017/01/02", "2017/01/03", "2017/01/04", "2017/01/08", "2017/01/09" ]; 这应转化为: [ { start_date: "2017/01/01", end_date: "2017/01/04" }, { start_date: "2017/01/08", end

我想从数组的静态日期创建日期范围。
以下是我想要的示例:

var collDates = [
  "2017/01/01", 
  "2017/01/02", 
  "2017/01/03", 
  "2017/01/04", 
  "2017/01/08", 
  "2017/01/09"
];
这应转化为:

[
  { start_date: "2017/01/01", end_date: "2017/01/04" }, 
  { start_date: "2017/01/08", end_date: "2017/01/09" }
]; 

我已经解决了这个问题,下面是一个示例代码

var staticDates = ["2017/01/01", "2017/01/02", "2017/01/03", "2017/01/04", "2017/01/08", "2017/01/09", "2017/01/10", "2017/01/11", "2017/01/12", "2017/01/13", "2017/01/14", "2017/01/15", "2017/01/16", "2017/01/17", "2017/01/18", "2017/01/19", "2017/01/20", "2017/01/21", "2017/01/22", "2017/01/23", "2017/01/24", "2017/01/25", "2017/01/26", "2017/01/27", "2017/01/28", "2017/01/29"];
var coll_dateIntervals = []; 
var arr_temp = []; 
var i = 1;
$.each(staticDates, function(index, moment_date){ 

//Day difference in # of days 
 var diff = Math.abs(moment(staticDates[index]).diff(staticDates[index + 1], "days")); 

   arr_temp.push(moment_date); 

  //Check the date difference in days. 
  if(diff <= 1 && diff !== undefined){ 

   //If the difference is 1, than add the date to the temporary array 
   arr_temp.push(moment_date); 

  //If it's more than 1 day, or the last object 
 } else if (diff > 1 || diff === undefined){ 
   //Store the interval in an object 
   console.log(arr_temp[arr_temp.length - 1]);
   var obj_dateInterval = { start_date: moment(arr_temp[0],  "YYYY/MM/DD").format('YYYY-MM-DD'), end_date:    moment(arr_temp[arr_temp.length - 1], "YYYY/MM/DD").format('YYYY-MM-DD')}; 
   coll_dateIntervals.push(obj_dateInterval); 

   //Empty the array to start the new loop 
   arr_temp = [];  

 }

}); 
console.log(coll_dateIntervals); 
var staticDates=[“2017/01/01”、“2017/01/02”、“2017/01/03”、“2017/01/04”、“2017/01/08”、“2017/01/09”、“2017/01/10”、“2017/01/11”、“2017/01/12”、“2017/01/13”、“2017/01/14”、“2017/01/15”、“2017/01/16”、“2017/01/17”、“2017/01/18”、“2017/01/19”、“2017/01/20”、“2017/01/01/21”、“2017/01/22”、“2017/01/01/23”、“2017/01/01/24”、“2017/01/01/25”、“2017/01/01/26”,"2017/01/27", "2017/01/28", "2017/01/29"];
var coll_dateinterval=[];
var arr_temp=[];
var i=1;
$.each(静态日期、函数(索引、时刻和日期){
//以天为单位的日差
var diff=Math.abs(矩(staticDates[index]).diff(staticDates[index+1],“天”);
到达温度推送(时刻/日期);
//检查日期差异(以天为单位)。

如果(diff没有库,您只需要几个简单的函数来解析和格式化。不会处理无效的日期,但如果需要添加也不困难

逐步浏览日期以创建范围。以开始日期开始,将第二天计算为当前日期加上一天。如果获得的日期不是第二天,则结束范围并开始新的日期。如果日期已满,则结束

对于单个日期,创建单个日期范围

/*以y/m/d格式解析日期
**@param{string}s-要分析的字符串
**@returns{Date}
*/
函数parseYMD(s){
var b=s.split(/\D/);
返回新日期(b[0],b[1]-1,b[2])
}
/*将y/m/d格式的日期字符串数组整理为范围
**@param{Array}dateArray-以y/m/d格式解析的日期数组
**@返回{Array}范围,格式为{开始日期:yyyy/mm/dd,结束日期:yyyy/mm/dd}
*/
函数DateStorRanges(dateArray){
return dateArray.reduce(函数(acc、currentDate、index){
var d=parseYMD(当前日期);
//开始处理,初始化累加器
如果(!acc){
acc={range:{start_date:currentDate},ranges:[]};
//如果不是连续范围,则结束当前范围,存储并开始新的
}else if(acc.previousDate.setDate(acc.previousDate.getDate()+1)!=+d){
acc.range.end_date=acc.previousString;
附件范围推送(附件范围);
acc.range={开始日期:当前日期};
}
//为下一次迭代保留当前值
acc.previousDate=d;
acc.previousString=当前日期;
//如果在日期末尾,则结束当前范围
如果(索引==dateArray.length-1){
acc.range.end_date=当前日期;
附件范围推送(附件范围);
}
返回acc;
},空)。范围;
}
//测验
var collDates=[
“2017/01/01”//开始4天范围
"2017/01/02",
"2017/01/03",
“2017/01/04”,//结束4天范围
“2017/01/06”,//零日范围
“2017/01/08”//开始一天范围
“2017/01/09”//结束一天的工作范围
“2017/01/15”,//零日范围
];

console.log(datesToRanges(collDates));
为什么不先展示一下你迄今为止的尝试?其中的问题是什么?那么你想要逻辑?OP-请先尝试一些东西,用你的大脑。@SaurabhAgrawal是的,似乎是这样。请@SaurabhAgrawal看看答案。我已经解决了。我也打算做@prabhdepsingh