从外部传入两个参数:开始时间、结束时间 (格式:2010-1-1 9:30)输入的时间只有两种形式,整的时间和半点的时间(9:00 或者 9:30) 工作时间按9:30-12:00,13:00-18:30计(12:00-13:00午休不计入工时)。双休日也要踢除。超出以上时间范围的均不计入工时;下面括号里的看不清楚就不用做:
(显示开始时间与结束时间计算出的数值,公示基础以A.BC(A为天、B为小时C为半小时用5代表,8小时升位);例如:
1.45 表示1天零4个半小时,即开发共用12.5小时;0.05 表示半小时)
比如
var a = new Date('2001/10/03');
var b = new Date('2001/11/05');
alert((a-b)/1000/60/60 + "小时")
计算一段时间的
function getHour(d1,d2){
if(d1>=d2)return 0;
var rtn=Math.floor(((d2-d1)/(3600*1000))/24);
var temp=((d2-d1)/(3600*1000))%24;
rtn=Math.floor(((d2-d1)/(3600*1000))/24);
//d1.setTime(d1.getTime()+temp*3600*1000);
while(d1.getHours()*60+d1.getMinutes()!=d2.getHours()*60+d2.getMinutes()){
d1.setTime(d1.getTime()+0.5*3600*1000);
if(d1.getHours()*60+d1.getMinutes()>9*60+30 &&
d1.getHours()*60+d1.getMinutes()<=12*60){
rtn+=0.05;
}
if(d1.getHours()*60+d1.getMinutes()>=13*60 &&
d1.getHours()*60+d1.getMinutes()<18*60+30){
rtn+=0.05;
}
}
alert(rtn);
}getHour(new Date("2010/1/1 9:30"),new Date("2010/1/2 18:30"));
getHour(new Date("2010/1/1 8:30"),new Date("2010/1/2 18:30"));
</script>
<script>
function getHour(d1,d2){
if(d1>=d2)return 0;
var rtn=Math.floor(((d2-d1)/(3600*1000))/24);
var temp=0;
rtn=Math.floor(((d2-d1)/(3600*1000))/24);
while(d1.getHours()*60+d1.getMinutes()!=d2.getHours()*60+d2.getMinutes()){
if(d1.getHours()*60+d1.getMinutes()>=9*60+30 &&
d1.getHours()*60+d1.getMinutes()<12*60){
temp+=0.05;
}
if(d1.getHours()*60+d1.getMinutes()>=13*60 &&
d1.getHours()*60+d1.getMinutes()<18*60+30){
temp+=0.05;
}
d1.setTime(d1.getTime()+0.5*3600*1000);
}
rtn+=Math.floor(temp/0.8);
rtn+=temp%0.8;
rtn=Math.floor(rtn*100)/100
alert(rtn);
}getHour(new Date("2010/1/1 12:30"),new Date("2010/1/2 11:30"));
getHour(new Date("2010/1/1 10:30"),new Date("2010/1/2 19:30"));
getHour(new Date("2010/1/1 8:30"),new Date("2010/1/2 17:30"));
</script>