从5分钟间隔到20分钟间隔过滤日期数组

时间:2019-03-11 12:34:45

标签: javascript momentjs lodash

我在08:00-17:00之间有大量的预订申请位。 每个时段都是5分钟,我已经删除了所有与已预订的时段重叠的时段。

例如,在11:00-12:50之间已经有一个事件,因此该时隙不可用。

{
    "date": "2019-03-15",
    "start": "2019-03-15T09:15:00.000Z",
    "starttime": "10:15",
    "end": "2019-03-15T09:45:00.000Z",
    "endtime": "10:45"
  },
  {
    "date": "2019-03-15",
    "start": "2019-03-15T09:20:00.000Z",
    "starttime": "10:20",
    "end": "2019-03-15T09:50:00.000Z",
    "endtime": "10:50"
  },
  {
    "date": "2019-03-15",
    "start": "2019-03-15T09:25:00.000Z",
    "starttime": "10:25",
    "end": "2019-03-15T09:55:00.000Z",
    "endtime": "10:55"
  },
  {
    "date": "2019-03-15",
    "start": "2019-03-15T09:30:00.000Z",
    "starttime": "10:30",
    "end": "2019-03-15T10:00:00.000Z",
    "endtime": "11:00"
  },
  {
    "date": "2019-03-15",
    "start": "2019-03-15T11:50:00.000Z",
    "starttime": "12:50",
    "end": "2019-03-15T12:20:00.000Z",
    "endtime": "13:20"
  },

但是,在将其退还给最终用户之前,我需要删除所有元素,因此每个插槽之间有20分钟的间隔。 因此,我希望每隔5分钟而不是每5分钟插入一次。所以结束时间必须是10:20 ... 10:40 ... 11:00 .. 所有事件都不得与已预订的事件有差距。 因此,每个插槽都必须有一个连接到现有事件的插槽。

我应该怎么做?

1 个答案:

答案 0 :(得分:0)

将Json对象放入数组中并执行以下代码。

搜索是用于查找时隙的变量。

function toDate(dStr,format) {
    var now = new Date();
    if (format == "h:m") {
        now.setHours(dStr.substr(0,dStr.indexOf(":")));
        now.setMinutes(dStr.substr(dStr.indexOf(":")+1));
        now.setSeconds(0);
        return now;
    }else 
        return "Invalid Format";
}

let serach="13:10";
let value = sample.filter((val) => {
    if( (toDate(val.endtime,"h:m").toTimeString() >= toDate(serach,"h:m").toTimeString()) && (toDate(val.starttime,"h:m").toTimeString() <= toDate(serach,"h:m").toTimeString()) ){
      return val.starttime;
   }
})

value将保留其时隙与json中的日期匹配的数组

相关问题