我现在在做一个会议室的预定系统,用户会输入一个会议的开始时间和结束时间。如果在这个时间段会议室没有被预定,那么他就能够成功在这个时间段预定这个会议室,将它提交的内容插入数据库。否则预定不成功,提交数据不需要插入。
我想请问大家应该怎么来根据提交的数据和数据库对比,得到这个时间段是否有效?请帮忙指点,不胜感激!
譬如如果已经有人在8:00-10:00,以及15:30-17:30预定了一号会议室,那么如果在9:00-14:00就应该预定不成功,而在10:30-13:00应该还是可以预定成功的。
20 个解决方案
#1
希望大神能够写下代码,我是个小白,不怎么会
#2
告诉你一下思路吧。
假设你的时间段[x~y] 在跟一段已经使用了的时间段[a~b]冲突,那么就要满足条件
(x>=a && x<=b) || (y>=a && y<=b)
或者使用 t-sql语言就是
x between a and b or y between a and b
假设你的时间段[x~y] 在跟一段已经使用了的时间段[a~b]冲突,那么就要满足条件
(x>=a && x<=b) || (y>=a && y<=b)
或者使用 t-sql语言就是
x between a and b or y between a and b
#3
嗯,不对!
#4
在上述判断条件的同时,还要 [a~b] 不在 [x~y] 之内,也就是
(x>=a && x<=b) || (y>=a && y<=b) || (a>=x && a<=b && b>=x && b<=y)
或者说
x between a and b or y between a and b or (a between x and y and b bewteen y)
凡是符合此条件的,表示时间段 [x~y]跟已经预定的时间段有重叠部分,不能分配。
(x>=a && x<=b) || (y>=a && y<=b) || (a>=x && a<=b && b>=x && b<=y)
或者说
x between a and b or y between a and b or (a between x and y and b bewteen y)
凡是符合此条件的,表示时间段 [x~y]跟已经预定的时间段有重叠部分,不能分配。
#5
假定:预订的时间为 A_Start 和 A_End,而数据库中存放的时间为 B_Start 和 B_End
则判断是否冲突的方法为
A_Start <= B_End And A_End > B_Start
即可
则判断是否冲突的方法为
A_Start <= B_End And A_End > B_Start
即可
#6
这就是个初中数学题啊..
#8
A_Start <= B_End And A_End > B_Start
这个条件根本不可能成立吧?
这个条件根本不可能成立吧?
#9
应该是
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
#10
A_End< B_Start OR A_Start > B_End
时间不冲突
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
时间冲突
时间不冲突
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
时间冲突
#11
不仅仅提交的时候要判断,首先用户在选择前,你就应该把可以选择的时间段罗列出来,前端也要做一次判断。
#12
你保存在数据库的内容是怎样的先??是不是StartDateTime(开始时间)一个字段、EndDateTime(结束时间)一个字段的??
如果是这样的话,那就简单得多了~~~你只需要取出预定日期内所有的EndDateTime(结束时间),然后循环这些取出的值与用户输入的开始时间做判断
仅当用户的开始时间大于取出的结束时间就表示该时间有效啊
如果是这样的话,那就简单得多了~~~你只需要取出预定日期内所有的EndDateTime(结束时间),然后循环这些取出的值与用户输入的开始时间做判断
仅当用户的开始时间大于取出的结束时间就表示该时间有效啊
#13
还真得用And,而不是Or,你画个图就知道了,呵
反正当时我为了算这个东西,我把所有的可能都用线条画了一遍,最后得出这么个公式的。至少目前我用在正式系统上运行好几年了,没出现过啥问题
#14
无非是几种情况:
1. 左半交叉
2. 右半交叉
3. 全等
4. 全包含
5. 全部被包含
#15
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
#16
如果给我写的话,我首先要查询数据库里面当天的所有会议,如果没有会议,你这个时间肯定是没有问题的
如果有一条或者多条,就循环查询出来的会议,拿你的开始和结束时间,分别和每条会议的开始结束时间对比,只要有一条冲突就return
当然这是在不考虑从晚上23:00-第二天2:00这种情况的
如果有一条或者多条,就循环查询出来的会议,拿你的开始和结束时间,分别和每条会议的开始结束时间对比,只要有一条冲突就return
当然这是在不考虑从晚上23:00-第二天2:00这种情况的
#17
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。
因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。
不知道这个思路有没有漏洞呢,试一试。
#18
1、用开始时间和所有已预订进行比较,如果在预定时间范围就不符合
2、用结束时间和所有已预订进行比较,如果在预定时间范围就不符合
2、用结束时间和所有已预订进行比较,如果在预定时间范围就不符合
#19
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。
因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。
不知道这个思路有没有漏洞呢,试一试。
你这样的需求的话,用户界面直接显示48个格子,标出对应的时间段。一开始都能点,点了的就反转bool值。被别人点过的就不能点,自己点过的可以点回去,这样操作也简单。
#20
我觉得只需要判断下,新预约的开始时间小于已经预约的结束时间,或者新预约结束时间大于已经预约的开始时间就够,如果一天多个,那就遍历挨个判断不就好
#21
#1
希望大神能够写下代码,我是个小白,不怎么会
#2
告诉你一下思路吧。
假设你的时间段[x~y] 在跟一段已经使用了的时间段[a~b]冲突,那么就要满足条件
(x>=a && x<=b) || (y>=a && y<=b)
或者使用 t-sql语言就是
x between a and b or y between a and b
假设你的时间段[x~y] 在跟一段已经使用了的时间段[a~b]冲突,那么就要满足条件
(x>=a && x<=b) || (y>=a && y<=b)
或者使用 t-sql语言就是
x between a and b or y between a and b
#3
嗯,不对!
#4
在上述判断条件的同时,还要 [a~b] 不在 [x~y] 之内,也就是
(x>=a && x<=b) || (y>=a && y<=b) || (a>=x && a<=b && b>=x && b<=y)
或者说
x between a and b or y between a and b or (a between x and y and b bewteen y)
凡是符合此条件的,表示时间段 [x~y]跟已经预定的时间段有重叠部分,不能分配。
(x>=a && x<=b) || (y>=a && y<=b) || (a>=x && a<=b && b>=x && b<=y)
或者说
x between a and b or y between a and b or (a between x and y and b bewteen y)
凡是符合此条件的,表示时间段 [x~y]跟已经预定的时间段有重叠部分,不能分配。
#5
假定:预订的时间为 A_Start 和 A_End,而数据库中存放的时间为 B_Start 和 B_End
则判断是否冲突的方法为
A_Start <= B_End And A_End > B_Start
即可
则判断是否冲突的方法为
A_Start <= B_End And A_End > B_Start
即可
#6
这就是个初中数学题啊..
#7
参考这里(第5点,有SQL语句):
http://www.cnblogs.com/insus/archive/2011/08/27/2155286.html
http://www.cnblogs.com/insus/archive/2011/08/27/2155286.html
#8
A_Start <= B_End And A_End > B_Start
这个条件根本不可能成立吧?
这个条件根本不可能成立吧?
#9
应该是
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
#10
A_End< B_Start OR A_Start > B_End
时间不冲突
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
时间冲突
时间不冲突
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
时间冲突
#11
不仅仅提交的时候要判断,首先用户在选择前,你就应该把可以选择的时间段罗列出来,前端也要做一次判断。
#12
你保存在数据库的内容是怎样的先??是不是StartDateTime(开始时间)一个字段、EndDateTime(结束时间)一个字段的??
如果是这样的话,那就简单得多了~~~你只需要取出预定日期内所有的EndDateTime(结束时间),然后循环这些取出的值与用户输入的开始时间做判断
仅当用户的开始时间大于取出的结束时间就表示该时间有效啊
如果是这样的话,那就简单得多了~~~你只需要取出预定日期内所有的EndDateTime(结束时间),然后循环这些取出的值与用户输入的开始时间做判断
仅当用户的开始时间大于取出的结束时间就表示该时间有效啊
#13
应该是
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
还真得用And,而不是Or,你画个图就知道了,呵
反正当时我为了算这个东西,我把所有的可能都用线条画了一遍,最后得出这么个公式的。至少目前我用在正式系统上运行好几年了,没出现过啥问题
#14
应该是
A_End< B_Start OR A_Start > B_End
这是成立的条件
不成立的条件则是:
A_Start between B_Start and B_End
or
A_End between B_Start and B_End
or
A_Start<=B_Start and A_End>=B_End
还真得用And,而不是Or,你画个图就知道了,呵
反正当时我为了算这个东西,我把所有的可能都用线条画了一遍,最后得出这么个公式的。至少目前我用在正式系统上运行好几年了,没出现过啥问题
无非是几种情况:
1. 左半交叉
2. 右半交叉
3. 全等
4. 全包含
5. 全部被包含
#15
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
#16
如果给我写的话,我首先要查询数据库里面当天的所有会议,如果没有会议,你这个时间肯定是没有问题的
如果有一条或者多条,就循环查询出来的会议,拿你的开始和结束时间,分别和每条会议的开始结束时间对比,只要有一条冲突就return
当然这是在不考虑从晚上23:00-第二天2:00这种情况的
如果有一条或者多条,就循环查询出来的会议,拿你的开始和结束时间,分别和每条会议的开始结束时间对比,只要有一条冲突就return
当然这是在不考虑从晚上23:00-第二天2:00这种情况的
#17
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。
因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。
不知道这个思路有没有漏洞呢,试一试。
#18
1、用开始时间和所有已预订进行比较,如果在预定时间范围就不符合
2、用结束时间和所有已预订进行比较,如果在预定时间范围就不符合
2、用结束时间和所有已预订进行比较,如果在预定时间范围就不符合
#19
这个还是要转成bool[1439]的数组处理才快!把分钟转成整数后,只需要判断连续空间内是否有true值即可。
感觉这个思路很不错, 我刚好在做ios的手机会议室预定APP,公司内部使用,我尝试一下这个思路。
而且通常的预定都是整点或者半点开始,也就是说 Boolean[48] 就够了,感觉效率会很不错。
因为没有夸天的需求,所有的预定都在9点到17点之间,所以针对每一天:
1. 数据库里面,每一条预定实例,都有StartTime 和 EndTime。
2. 用户预定的时候,程序首先读出当天所有的预定记录,然后初始化数组Boolean[48] 。
3. 利用数组来初始化预定的时间选择界面,实现第一次验证,让用户无法选择无效的时间段。
4. 利用数组来判断客户输入的预定时间,在存入数据库的时候做第二次验证。
不知道这个思路有没有漏洞呢,试一试。
你这样的需求的话,用户界面直接显示48个格子,标出对应的时间段。一开始都能点,点了的就反转bool值。被别人点过的就不能点,自己点过的可以点回去,这样操作也简单。
#20
我觉得只需要判断下,新预约的开始时间小于已经预约的结束时间,或者新预约结束时间大于已经预约的开始时间就够,如果一天多个,那就遍历挨个判断不就好