Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建时间戳数组删除开始和结束时段之间的小时数_Javascript_Node.js_Momentjs - Fatal编程技术网

Javascript 创建时间戳数组删除开始和结束时段之间的小时数

Javascript 创建时间戳数组删除开始和结束时段之间的小时数,javascript,node.js,momentjs,Javascript,Node.js,Momentjs,我目前正在开发一个应用程序,人们可以在其中安排注册专业人士提供的服务。想法很简单,用户将打开应用程序,选择专业人员,并显示所有可用时间的议程 专业人员每天有一个开始和结束的工作时间,并且服务有一个持续时间,因此他一天可能有很多服务 在选择专业人士和服务后,我目前正在做什么(我将在下面发布相关代码): 我知道专业人士的工作时间,从周日到周六,他工作几天,开始和结束工作的时间 我知道他的日程安排,他已经安排好的,服务开始和结束的时间 我创建了一个数组,其中第一个条目是专业的开始时间,我对服务的持续

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

专业人员每天有一个开始和结束的工作时间,并且服务有一个持续时间,因此他一天可能有很多服务

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

  • 我知道专业人士的工作时间,从周日到周六,他工作几天,开始和结束工作的时间
  • 我知道他的日程安排,他已经安排好的,服务开始和结束的时间
  • 我创建了一个数组,其中第一个条目是专业的开始时间,我对服务的持续时间求和,并一直这样做,直到达到结束时间
  • 然后,我做一个循环,删除可能安排服务的任何可用小时
以下是我使用的变量示例:

工作日={
开始时间:'08:00AM',结束时间:'05:00PM'
};
服务持续时间=30;
议程=[
{“from”:157268340000,“to”:1572685200000},
{“from”:1572685200000,“to”:15726870000000},
{“from”:157268800000,“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'];
//baseArray也被转换为时间戳,这只是为了演示
//在代码中,议程称为removeArray
对于我正在做的事情,它工作得非常完美,但是一些新的东西刚刚出现,我们需要根据议程中的服务结束的时间生成可用时间

假设我有一个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;
    }
  }
}
let startHour=new Date(`${currentDay}T${weekDay.startHour}:00.000Z`);
const endHourTime=newdate(`${currentDay}T${weekDay.endHour}:00.000Z`)。getTime();
如果(开始时间=持续时间){
baseArray.push(startHour);
startHour=getNextAvailableTime(startHour、duration、removeArray);
}
}
函数getNextAvailableTime(startHour、duration、removeArray){
常量过滤器阵列=[];
for(设i=0,max=removeray.length;i=removeArray[i]。from&&startHour0){
返回过滤器阵列[0];
}否则{
返回startHour+持续时间;
}
}
}
这将我置于一个无限循环中,始终获取removeArray中第一个值的结尾。知道我做错了什么吗?如果你需要更好的解释,我很乐意这样做