首页 > 解决方案 > 创建时间戳数组删除开始和结束期间之间的小时数

问题描述

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

专业人员有一天的开始和结束工作时间,服务也有持续时间,因此他可能在一天内有很多服务。

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

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

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 中第一个值的结尾。知道我在做什么错吗?如果您需要更好的解释,我很乐意这样做

标签: javascriptnode.jsmomentjs

解决方案


推荐阅读