做一个会议室预定,
周一预定周一到周五,
周二预定周二到周五,
周三预定周三到周五,
周四预定周四到周五,
周五预定周五,并且周五下午13;30开始预定下周一到周五。
请教这个js判断怎么完成,还有服务端怎么完成;给点思路,大概的代码解释?
分数给足……请大家帮忙解决!
26 个解决方案
#1
#2
楼主这个问题可以用客户端时间控件即可解决,先去下载一个My97DatePicker日期控件,通过下面的例子进行扩充,无非就是设置一下选择的时间段范围
<html>
<head>
<title>test</title>
<script language="javascript" type="text/javascript" src="Ext/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<input type="text" class="Wdate" onFocus="WdatePicker({minDate:'%y-%M-01',maxDate:'%y-%M-%ld',disabledDays:[1,3,6]})"/>
</body>
</html>
#3
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
#4
My97Date 我也用过,功能确实很强大,楼主可以看看
#5
我用的就是My97Date ,但是就是判断预定时间的限制!关键是判断上面我说的需求,其他的添加会议室重复已经解决。
周一预定周一到周五,
周二预定周二到周五,
周三预定周三到周五,
周四预定周四到周五,
周五预定周五,并且周五下午13;30开始预定下周一到周五。这个My97Date 可以做到吗?
周一预定周一到周五,
周二预定周二到周五,
周三预定周三到周五,
周四预定周四到周五,
周五预定周五,并且周五下午13;30开始预定下周一到周五。这个My97Date 可以做到吗?
#6
这个控件怎么判断
是自己在WdatePicker()里另外写个方法吗?
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
是自己在WdatePicker()里另外写个方法吗?
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
#7
My97DatePicker 演示和文档
二. 功能及示例
4. 日期范围限制
示例4-1-1 限制日期的范围是 2006-09-10到2008-12-20
示例4-1-2 限制日期的范围是 2008-3-8 11:30:00 到 2008-3-10 20:59:30
二. 功能及示例
4. 日期范围限制
示例4-1-1 限制日期的范围是 2006-09-10到2008-12-20
<input id="d411" class="Wdate" type="text" onfocus="WdatePicker({skin:'whyGreen',minDate:'2006-09-10',maxDate:'2008-12-20'})"/>
示例4-1-2 限制日期的范围是 2008-3-8 11:30:00 到 2008-3-10 20:59:30
<input type="text" class="Wdate" id="d412" onfocus="WdatePicker({skin:'whyGreen',dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'2008-03-08 11:30:00',maxDate:'2008-03-10 20:59:30'})" value="2008-03-09 11:00:00"/>
#8
代码实现其实不难,只要有思路,给你个提示,楼主得自己去完善,有问题再问
<html>
<head>
<title>test</title>
<script language="javascript" type="text/javascript" src="Ext/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<script language="javascript">
function datepick()
{
var weekday="星期"+"日一二三四五六".substr(new Date().getDay(),1);
var dtbegin,dtend;
switch(weekday)
{
case "星期一":
break;
case "星期二":
break;
case "星期三":
dtbegin="2011-08-24";
dtend="2011-08-26";
break;
case "星期四":
break;
case "星期五":
break;
}
return WdatePicker({minDate:dtbegin,maxDate:dtend});
}
</script>
<input type="text" class="Wdate" onFocus="datepick()"/>
</body>
</html>
#9
function datepick()
{
var weekday="星期"+"日一二三四五六".substr(new Date().getDay(),1);
var dtbegin,dtend;
switch(weekday)
{
case "星期一":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+5} 23:59:59";
break;
case "星期二":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+4} 23:59:59";
break;
case "星期三":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
break;
case "星期四":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+2} 23:59:59";
break;
case "星期五":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+1} 23:59:59";
break;
//minDate:'%y-%M-%d 00:00:00',maxDate:'%y-%M-#{%d+4} 23:59:59'
}
return WdatePicker({minDate:dtbegin,maxDate:dtend,disabledDays:[6,0],specialDays:[1,2,3,4,5]});
}
我的修改是这样的,不知道是否有问题!呵呵
#10
但是还有个问题就是关于周五13:30这个判断该如何做?
#11
那就在case "星期五":里面再判断当前时间是否已经超过13:30
#12
自己不断的调试,不断的完善,相信离成功不远了
#13
case "星期五":
break;
case里面还可以加判断吗?
break;
case里面还可以加判断吗?
#14
加if啊。~
#15
这样的吗?
case "星期三":
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
#16
有这样的写法吗?case "星期三":
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
#17
当然可以
#18
谢谢大家的热心帮忙啊!非常感谢啊!还有一个问题的就是客户端已经验证完成,但是服务端怎么解决预定会议室重复的问题?
#19
顶上去,关于在服务端该如何判断呢?
#20
用会议室有主键,加2个时间段是否有交集
这边你要写一个循环,获取会议室下数据库已有的预定所有记录,分别取出开始时间S21和结束时间S22,通过客户端获取的开始时间S11和结束时间S12
这边你要写一个循环,获取会议室下数据库已有的预定所有记录,分别取出开始时间S21和结束时间S22,通过客户端获取的开始时间S11和结束时间S12
四个变量的单位你可以以一个固定时间(1900-01-01 00:00:00)作为参考值,分别得到秒数
private bool HasJoin(int s11,int s12,int s21,int s22)
{
if((s12<s21) || (s12>s22))
{
//无交集,即不冲突
return false;
}
else
{
//有交集,即冲突
return true;
}
}
#21
如果通过sql语句完成,怎么样?
#22
这个前台设计好了,只需要后台判断了。哪用得着前后两重关。后台如何判断,楼主应该没问题吧。
前台部分,你在后台里根据时间,只输出他可以选择的范围。至于他是不是手工修改了不可选的范围也没关系,反正到了后台,无论是输入有效性还是预定的有效性都统统验证一下。
前台部分,你在后台里根据时间,只输出他可以选择的范围。至于他是不是手工修改了不可选的范围也没关系,反正到了后台,无论是输入有效性还是预定的有效性都统统验证一下。
#23
比如,既然对周三来说,周一和周二已经不可选了,那你输出出来干嘛?用户看着碍眼不说,你再用JS判断然后提示用户这两天不能选,不纯粹画蛇添足吗?直接在后台里根据时间,作废的选项就不输出,只输出可选的选项就行了。
#24
后台还是需要再次验证的,前台可能同时有多人申请,那么到后台必须得验证申请会议室的时间段是否已经有人申请
#25
如果用户在前台操作界面停留时间过长之后才提交申请,即使先前在前台用AJAX取到了会议室状态是可以预订的,也可能由于提交之前的这段时间有人申请成功,而AJAX只在选择日期时验证过一次,而出现被别人先预订的返回消息。事实上,从返回预订页面,到用户选择预订时间的间隔不会太久(对于那些真想预订的人来说,在打开网站之前就已经有明确目标,上来就是操作),用AJAX即时验证都显得没什么必要。
我上面说的不全,应该是周三返回时不必包括周一和周二这样之前的日程,同时也排除被订下的日程,只返回空置可选择的日程。
#26
如果仅仅在客户端验证,假如有的人将客户端的时间调整,你服务端不去做验证,这样就出乱的。
#1
#2
楼主这个问题可以用客户端时间控件即可解决,先去下载一个My97DatePicker日期控件,通过下面的例子进行扩充,无非就是设置一下选择的时间段范围
<html>
<head>
<title>test</title>
<script language="javascript" type="text/javascript" src="Ext/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<input type="text" class="Wdate" onFocus="WdatePicker({minDate:'%y-%M-01',maxDate:'%y-%M-%ld',disabledDays:[1,3,6]})"/>
</body>
</html>
#3
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
#4
My97Date 我也用过,功能确实很强大,楼主可以看看
#5
我用的就是My97Date ,但是就是判断预定时间的限制!关键是判断上面我说的需求,其他的添加会议室重复已经解决。
周一预定周一到周五,
周二预定周二到周五,
周三预定周三到周五,
周四预定周四到周五,
周五预定周五,并且周五下午13;30开始预定下周一到周五。这个My97Date 可以做到吗?
周一预定周一到周五,
周二预定周二到周五,
周三预定周三到周五,
周四预定周四到周五,
周五预定周五,并且周五下午13;30开始预定下周一到周五。这个My97Date 可以做到吗?
#6
这个控件怎么判断
是自己在WdatePicker()里另外写个方法吗?
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
是自己在WdatePicker()里另外写个方法吗?
获取当前时间,得到星期几,
1、只要不是星期五,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
2、如果是星期五,
21、当前时间没有大于13;30,日期控件设置mindate:当前时间,maxdate:本周周五(如果还有小时、分、秒,也要一起加上)
22、当前时间大于13;30,日期控件设置mindate:下周周一,maxdate:下周周五(如果还有小时、分、秒,也要一起加上)
#7
My97DatePicker 演示和文档
二. 功能及示例
4. 日期范围限制
示例4-1-1 限制日期的范围是 2006-09-10到2008-12-20
示例4-1-2 限制日期的范围是 2008-3-8 11:30:00 到 2008-3-10 20:59:30
二. 功能及示例
4. 日期范围限制
示例4-1-1 限制日期的范围是 2006-09-10到2008-12-20
<input id="d411" class="Wdate" type="text" onfocus="WdatePicker({skin:'whyGreen',minDate:'2006-09-10',maxDate:'2008-12-20'})"/>
示例4-1-2 限制日期的范围是 2008-3-8 11:30:00 到 2008-3-10 20:59:30
<input type="text" class="Wdate" id="d412" onfocus="WdatePicker({skin:'whyGreen',dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'2008-03-08 11:30:00',maxDate:'2008-03-10 20:59:30'})" value="2008-03-09 11:00:00"/>
#8
代码实现其实不难,只要有思路,给你个提示,楼主得自己去完善,有问题再问
<html>
<head>
<title>test</title>
<script language="javascript" type="text/javascript" src="Ext/My97DatePicker/WdatePicker.js"></script>
</head>
<body>
<script language="javascript">
function datepick()
{
var weekday="星期"+"日一二三四五六".substr(new Date().getDay(),1);
var dtbegin,dtend;
switch(weekday)
{
case "星期一":
break;
case "星期二":
break;
case "星期三":
dtbegin="2011-08-24";
dtend="2011-08-26";
break;
case "星期四":
break;
case "星期五":
break;
}
return WdatePicker({minDate:dtbegin,maxDate:dtend});
}
</script>
<input type="text" class="Wdate" onFocus="datepick()"/>
</body>
</html>
#9
function datepick()
{
var weekday="星期"+"日一二三四五六".substr(new Date().getDay(),1);
var dtbegin,dtend;
switch(weekday)
{
case "星期一":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+5} 23:59:59";
break;
case "星期二":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+4} 23:59:59";
break;
case "星期三":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
break;
case "星期四":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+2} 23:59:59";
break;
case "星期五":
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+1} 23:59:59";
break;
//minDate:'%y-%M-%d 00:00:00',maxDate:'%y-%M-#{%d+4} 23:59:59'
}
return WdatePicker({minDate:dtbegin,maxDate:dtend,disabledDays:[6,0],specialDays:[1,2,3,4,5]});
}
我的修改是这样的,不知道是否有问题!呵呵
#10
但是还有个问题就是关于周五13:30这个判断该如何做?
#11
那就在case "星期五":里面再判断当前时间是否已经超过13:30
#12
自己不断的调试,不断的完善,相信离成功不远了
#13
case "星期五":
break;
case里面还可以加判断吗?
break;
case里面还可以加判断吗?
#14
加if啊。~
#15
这样的吗?
case "星期三":
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
#16
有这样的写法吗?case "星期三":
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
if(ordertime>=atorder){
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+9} 23:59:59";
}else{
dtbegin="%y-%M-%d 00:00:00";
dtend="%y-%M-#{%d+3} 23:59:59";
}
break;
#17
当然可以
#18
谢谢大家的热心帮忙啊!非常感谢啊!还有一个问题的就是客户端已经验证完成,但是服务端怎么解决预定会议室重复的问题?
#19
顶上去,关于在服务端该如何判断呢?
#20
用会议室有主键,加2个时间段是否有交集
这边你要写一个循环,获取会议室下数据库已有的预定所有记录,分别取出开始时间S21和结束时间S22,通过客户端获取的开始时间S11和结束时间S12
这边你要写一个循环,获取会议室下数据库已有的预定所有记录,分别取出开始时间S21和结束时间S22,通过客户端获取的开始时间S11和结束时间S12
四个变量的单位你可以以一个固定时间(1900-01-01 00:00:00)作为参考值,分别得到秒数
private bool HasJoin(int s11,int s12,int s21,int s22)
{
if((s12<s21) || (s12>s22))
{
//无交集,即不冲突
return false;
}
else
{
//有交集,即冲突
return true;
}
}
#21
如果通过sql语句完成,怎么样?
#22
这个前台设计好了,只需要后台判断了。哪用得着前后两重关。后台如何判断,楼主应该没问题吧。
前台部分,你在后台里根据时间,只输出他可以选择的范围。至于他是不是手工修改了不可选的范围也没关系,反正到了后台,无论是输入有效性还是预定的有效性都统统验证一下。
前台部分,你在后台里根据时间,只输出他可以选择的范围。至于他是不是手工修改了不可选的范围也没关系,反正到了后台,无论是输入有效性还是预定的有效性都统统验证一下。
#23
比如,既然对周三来说,周一和周二已经不可选了,那你输出出来干嘛?用户看着碍眼不说,你再用JS判断然后提示用户这两天不能选,不纯粹画蛇添足吗?直接在后台里根据时间,作废的选项就不输出,只输出可选的选项就行了。
#24
后台还是需要再次验证的,前台可能同时有多人申请,那么到后台必须得验证申请会议室的时间段是否已经有人申请
#25
如果用户在前台操作界面停留时间过长之后才提交申请,即使先前在前台用AJAX取到了会议室状态是可以预订的,也可能由于提交之前的这段时间有人申请成功,而AJAX只在选择日期时验证过一次,而出现被别人先预订的返回消息。事实上,从返回预订页面,到用户选择预订时间的间隔不会太久(对于那些真想预订的人来说,在打开网站之前就已经有明确目标,上来就是操作),用AJAX即时验证都显得没什么必要。
我上面说的不全,应该是周三返回时不必包括周一和周二这样之前的日程,同时也排除被订下的日程,只返回空置可选择的日程。
#26
如果仅仅在客户端验证,假如有的人将客户端的时间调整,你服务端不去做验证,这样就出乱的。