Javascript 根据可用性和现有约会计算开放时间段-按天计算

Javascript 根据可用性和现有约会计算开放时间段-按天计算,javascript,sql,scheduling,Javascript,Sql,Scheduling,概述: 我有一个表,其中存储了一个人当天的“可用性”,例如 周一至上午8:00至11:30 周一至下午1:30至6:00 第二个表存储此人当天已有的约会,例如 周一至上午8:30至11:00 周一至下午2:30至4点 期望结果: 进行计算我希望得到以下结果-例如“此人在给定日期有空”: 周一至上午8:00至上午8:30 周一至上午11:00至上午11:30 周一至下午1:30至2:30 周一至下午4:00至6:00 如果您有任何关于如何根据两个输入(例如可用性、现有预约)计算产出的想法,我们将不

概述:

我有一个表,其中存储了一个人当天的“可用性”,例如

周一至上午8:00至11:30
周一至下午1:30至6:00

第二个表存储此人当天已有的约会,例如

周一至上午8:30至11:00
周一至下午2:30至4点

期望结果:
进行计算我希望得到以下结果-例如“此人在给定日期有空”:

周一至上午8:00至上午8:30
周一至上午11:00至上午11:30
周一至下午1:30至2:30
周一至下午4:00至6:00

如果您有任何关于如何根据两个输入(例如可用性、现有预约)计算产出的想法,我们将不胜感激。我最好在客户机上使用javascript进行计算,因为我相信在DB中进行计算(我使用的是MSSQL)对于许多记录、人员等来说速度会很慢


希望这些信息足以说明手头的问题-非常感谢。

您需要将时间离散化。选择用作原子的时间间隔。根据你的例子,大概需要半个小时

现在

我省略了主键,应该有外键来查找Person和Interval的表

将有一个间隔表,用于查找每个间隔id代表什么

Create table Interval(interval_id int primary key, interval_start datetime, interval_end datetime)
用日历中的每个间隔填充间隔表。填充它可能很麻烦,但您可以在Excel中创建实际值,然后将它们粘贴到间隔表中

现在你可以找到自由的时间间隔

Select person_id, interval_id from Availability av
left join Appointment ap
on av.person_id = ap.person_id and av.interval_id = ap.interval_id
where ap.interval_id is null

MSSQL可以在短时间内完成这种外部连接(只要您设置了键),并且您可以在发送的页面中包含空闲时间间隔列表,并使用javascript在需要时显示它们。

感谢您的快速回答-我不太确定是否遵循了您的逻辑。。。您将每次约会的开始和结束时间存储在哪里?你能再澄清一点吗?当然,我会在答案中添加细节。好的,我想我理解这个概念。与我最初存储每次约会的开始和结束日期的方法相比,这非常有意义。这是一个更好的方式很多人想知道你为什么用javascript标记这个?
Select person_id, interval_id from Availability av
left join Appointment ap
on av.person_id = ap.person_id and av.interval_id = ap.interval_id
where ap.interval_id is null