javascript - 将 from_date 和 to_date 拆分为日期范围数组列表

标签 javascript reactjs ecmascript-6 momentjs

如何从这个数组转换

[
    {
        "date_from": "2017-05-06 00:00:00",
        "date_to": "2017-05-08 23:59:59",
        "event": "code jam"
    },
    {
        "date_from": "2017-05-03 00:00:00",
        "date_to": "2017-05-07 23:59:59",
        "event": "boxing day"
    }
]

为了这个?

[
..
..
{date: '2017-05-06', state:{name:'San francisco'}},
{date: '2017-05-07', state:{name:'San francisco'}},
{date: '2017-05-08', state:{name:'San francisco'}},
..
..
]

我不知道从哪里开始。我获得了一个无法更改其结构的 API,我需要将数据放在日期范围列表中,以便我可以使用日历插件进行映射。需要帮忙。

最佳答案

首先,遍历事件,然后遍历事件日期并存储这些日期的事件:

var output=input.reduce(function(obj,event){
   for(var day=Math.floor(+new Date(event.date_from)/(1000*60*60*24)+1),max=Math.floor(+new Date(event.date_to)/(1000*60*60*24));day<=max;day++){
       (obj[day]=obj[day]||[]).push(event);
   }
 return obj;
},{});

然后从该对象创建一个数组(并缩短日期):

Date.prototype.format=function(str){
var map={
  dd:this.getDate(),
  mm:this.getMonth()+1,
  yyyy:this.getFullYear()
}
return str.split("-").map(el=>map[el]||"00").join("-");
}


var arr=[];
for(key in output){
  arr.push({date:new Date(key*1000*60*60*24).format("dd-mm-yyyy"),events:output[key]});
}
console.log(arr);

http://jsbin.com/jonaqefaxu/edit?console

关于javascript - 将 from_date 和 to_date 拆分为日期范围数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831941/

相关文章:

javascript - 在 React + ES6 中重置初始状态

javascript - For Loop 与 Do…While

javascript - 在javascript中获取上一个对象项

javascript - typescript 中的条件类型可以依赖于自身的值吗?

javascript - 如何在 react router dom v4 的嵌套路由中获取参数?

javascript - 在 Web 应用程序中乐观添加列表项的模式是什么?

javascript - 类型错误 : children is not a function

javascript - 避免对象突变

Javascript - 查找字谜的更好解决方案 - 时间复杂度 O (n log n)

javascript - 递归调用 promise 方法是无限的