读书人

js判断休息时间啊 大神看过来啊解决办

发布时间: 2013-09-27 14:23:42 作者: rapoo

js判断休息时间啊 大神看过来啊
这是一个计算调休时间的表单---表单有开始时间和结束时间,但输入完成时给出总时长,一天算8小时,不足一天的与上班时间及下班时间比较上班9:10下班18:00,中午12-13休息不算在内,但是如果上班中途休息的就需要和上班时间及下班时间比较了!目前写了部分但是有的时间可以有的就是错的求救啊
//上班时间
var startwork=" 09:10:00";
var endwork=" 18:00:00";//下班时间
var endmoon=" 12:00:00";//中午下班时间
var startnoon=" 13:00:00";//下午上班时间
var hour=0;
var days=0;
//获取页面的开始时间及结束时间
var staDate =new Date($(dialog).find("#attStaDate").val().replace(/-/g, "/"));
var endDate =new Date($(dialog).find("#attEndDate").val().replace(/-/g, "/"));
var ed=$(dialog).find("#attEndDate").val().replace(/-/g, "/")
var sd=$(dialog).find("#attStaDate").val().replace(/-/g, "/");
var startDay=sd.substring(0,sd.length-9);
var endDay=ed.substring(0,ed.length-9);
var hours=0;
var min=0;
var mn=0;
//判断当天是否到达公司
if((new Date(startDay+startwork)).getTime()-staDate.getTime()>0){
//判断时间是否在午休前
hours=0;
}else if((new Date(startDay+endmoon)).getTime()-staDate.getTime()>0){
days=(new Date(startDay+endmoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000));
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
//判断时间是否在下午上班前
}else if((new Date(startDay+startnoon)).getTime()-staDate.getTime()>0){
//判断时间是否在下班后
days=(new Date(startDay+startnoon)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}else{
days=(new Date(startDay+endwork)).getTime()-staDate.getTime();
hours=Math.floor(days/(3600*1000))-1;
alert(hours);
min=Math.floor(days/(60*1000));
alert(min);
mn=Math.ceil(Math.abs((min)/60));
alert(mn);
hours=parseFloat(hours)+parseFloat(mn);
}
alert(hours);
//判断时间开始是否在上班时间
if((new Date(endDay+endwork)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8+8-hours;
}else if((new Date(endDay+startnoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+startnoon)).getTime()-endDate.getTime())/(3600*1000);


hour=day*8+8-Math.floor(hour)-hours;
}else if((new Date(endDay+endmoon)).getTime()-endDate.getTime()<0){
days=(new Date(endDay+endmoon)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=((new Date(endDay+endmoon)).getTime()-endDate.getTime())/(3600*1000);
hour=day*8+8-(Math.floor(hour)+5)-hours;
}else{
days=(new Date(endDay+startwork)).getTime()-(new Date(startDay+startwork)).getTime();
var day=Math.floor(days/(3600*1000*24));
hour=day*8-hours;
}

alert(hour);





//var dateTim=endDate.getTime()-staDate.getTime();
//var iHours = Math.floor(dateTim/(3600*1000));//将时间转换为小时
$(dialog).find("#hourAmt").val(hour);
[解决办法]


<!DOCTYPE >
<HTML>
<BODY>
<script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

开始:<input id="attStaDate" onchange="f1()" value="2013-09-11 09:29:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })" /><br/>
结束:<input id="attEndDate" onchange="f1()" value="2013-09-12 19:29:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false })" /><br/>
时间:<input id="hourAmt" readonly="true" />/小时<br/>
<script>
var startwork="09:10:00";
var endmoon="12:00:00";//中午下班时间
var startnoon="13:00:00";//下午上班时间
var endwork="18:00:00";//下班时间
function t2h(t){
return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
}
function f1(){
var ed=$("#attEndDate").val().replace(/-/g, "/")
var sd=$("#attStaDate").val().replace(/-/g, "/");
var st=sd.slice(11),et=ed.slice(11);
if(!ed
------解决方案--------------------


!ed) return;
var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
var restTime=t2h(startnoon)-t2h(endmoon);
var h=0,_h;
if(st > startwork){
h=t2h(endwork)-t2h(st);
if(st< startnoon ){
_h=t2h(startnoon)-t2h(st)
h-=_h>restTime?restTime:_h;
}
}
if(et< endwork){
h-= t2h(et)-t2h(endwork) ;
if(et< startnoon ){
_h=t2h(startnoon)-t2h(et)
h+=_h>restTime?restTime:_h;
}
}
h=Math.round( h+(eDate-sDate)/864E5 *8);
$("#hourAmt").val(h)
return h
}
f1();
</script>
</BODY>
</HTML>


[解决办法]
#14处理结束时间不对,改了下

<!DOCTYPE >
<HTML>
<BODY>
<script src="http://www.my97.net/dp/My97DatePicker/WdatePicker.js" ></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
开始:<input id="attStaDate" onchange="f1()" value="2013-09-11 12:00:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00',isShowClear:false })" /><br/>
结束:<input id="attEndDate" onchange="f1()" value="2013-09-11 13:00:00" readonly="true"
onclick="WdatePicker({ dateFmt:'yyyy-MM-dd HH:mm:00', isShowClear:false,minDate:'#F{$dp.$D(\'attStaDate\')}' })" /><br/>
时间:<input id="hourAmt" readonly="true" />/小时<br/>
<script>
var startwork="09:10:00";
var endmoon="12:00:00";//中午下班时间
var startnoon="13:00:00";//下午上班时间
var endwork="18:00:00";//下班时间
function t2h(t){
return (new Date('0/1/1 '+t)- new Date('0/1/1'))/36e5
}
function f1(){
var sd=$("#attStaDate").val().replace(/-/g, "/");
var ed=$("#attEndDate").val().replace(/-/g, "/")
var st=sd.slice(11),et=ed.slice(11);
if(!ed
[解决办法]
!ed) return;
var sDate=new Date(sd.slice(0,10)),eDate=new Date(ed.slice(0,10)) ;
var restTime=t2h(startnoon)-t2h(endmoon);
var h=8,_h,ext;
if(st > startwork){


h=t2h(endwork)-t2h(st);
if(st< startnoon ){
_h=t2h(startnoon)-t2h(st)
h-=_h>restTime?restTime:_h;
}
}
if(et< endwork){
h-= t2h(endwork)- t2h(et);
if(et< startnoon ){
_h=t2h(startnoon)-t2h(et)
h+=_h>restTime?restTime:_h;
}
}
h=Math.round( h+(eDate-sDate)/864E5 *8);
$("#hourAmt").val(h)
return h
}
f1();
</script>
</BODY>
</HTML>

读书人网 >JavaScript

热点推荐