过滤日期从5分钟到20分钟的差距

问题描述 投票:0回答:1

我在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分钟就有一个20分钟的间隙。因此,结束时间必须是10:20 ... 10:40 ... 11:00 ..所有事件必须与已经预订的事件没有差距。因此每个插槽都必须有一个连接到现有事件的插槽。

我该怎么做?

javascript momentjs lodash
1个回答
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中的日期匹配的时间段的数组

© www.soinside.com 2019 - 2024. All rights reserved.