Фильтровать массив дат от 5 минут до 20 минут - PullRequest
0 голосов
/ 11 марта 2019

У меня большой выбор слотов с 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 .. У всех событий не должно быть промежутка до уже зарегистрированного события Поэтому каждый слот должен иметь слот, который подключается к существующему событию.

Как мне это сделать?

1 Ответ

0 голосов
/ 11 марта 2019

Поместите объект Json в массив и выполните следующий код.

Где search - переменная, используемая для поиска временного интервала.

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;
   }
})

значение будет содержать массив, в котором временной интервал соответствует дате в json

...