创建一系列时间戳,以消除开始和结束时间之间的小时数

时间:2019-11-01 19:53:25

标签: javascript node.js momentjs

我目前正在开发一个应用程序,人们可以在该应用程序上安排注册专业人员的服务。这个想法很简单,用户将打开应用程序,选择专业人员,并显示所有可用时间的议程。

该专业人员的上班时间和下班时间为一天,并且该服务有一定的持续时间,因此他一天可能会有很多服务。

选择专业人员和服务后我目前正在做什么(我将在下面发布相关代码):

  • 我得到了专业人员的工作时间,从星期日到星期六,他工作的日子以及他开始和结束工作的时间。
  • 我得到了他的日程安排,他已经安排的时间,服务的开始和结束时间。
  • 我创建了一个数组,其中第一个条目是专业的开始时间,他们将服务的持续时间加总并一直执行到结束时间。
  • 然后我循环播放以删除可能安排了服务的所有可用小时。

这是我使用的变量的示例:

weekDay = {
  startHour: '08:00AM', endHour: '05:00PM'
};
serviceDuration = 30;
agenda = [
  {"from": 1572683400000, "to": 1572685200000}, 
  {"from": 1572685200000, "to": 1572687000000},
  {"from": 1572688800000, "to": 1572690600000}, 
  {"from": 1572694200000, "to": 1572696000000},
  {"from": 1572696000000, "to": 1572699600000}, 
  {"from": 1572705000000, "to": 1572706800000},
  {"from": 1572711300000, "to": 1572713100000}
];
baseArray = ['08:00AM', '08:30AM', '09:00AM', '09:30AM', ..., '04:30PM'];
// The baseArray is also converted to timestamp, this is just to demonstrate
// Agenda is called removeArray in the code

对于我正在做的事情来说,它工作得很好,但是新的事情出现了,我们需要根据议程中的服务何时结束来生成可用时间。

因此,假设我有一个持续时间为45分钟的服务,我从08:00开始工作,并且已经有8:30至9:00的预订。加上我现在正在执行的持续时间,我将得到:['08:00', '08:45', '09:30']。但是我需要的是下一个可用时间是已经预订的服务结束时的时间,因此它应该类似于:['08:00', '09:00'];

我想出了一个代码,其中我检查当前添加的小时蜂鸣是否在当前预订的服务中间,如果是,则返回服务端作为下一个要比较的值。这是我现在拥有的代码:

  let startHour = new Date(`${currentDay}T${weekDay.startHour}:00.000Z`).getTime();
  const endHourTime = new Date(`${currentDay}T${weekDay.endHour}:00.000Z`).getTime();

  if (startHour <= endHourTime) {
    while (startHour < endHourTime && endHourTime - startHour >= duration) {
      baseArray.push(startHour);
      startHour = getNextAvailableTime(startHour, duration, removeArray);
    }
  }

function getNextAvailableTime(startHour, duration, removeArray) {
  const filterArray = [];
    for (let i = 0, max = removeArray.length; i < max; i++) {
      if ((startHour >= removeArray[i].from && startHour < removeArray[i].to)) {
        filterArray.push(removeArray[i].to);
        break;
      }
    }

    if (filterArray.length > 0) {
      return filterArray[0];
    } else {
      return startHour + duration;
    }
  }
}

这使我陷入无限循环,总是获得removeArray中第一个值的结尾。知道我在做什么错吗?如果您需要更好的解释,我会很乐意

0 个答案:

没有答案