作者hannsg830 (冰)
看板Ajax
标题[ajax]请问计算时数问题
时间Thu Aug 9 22:11:56 2012
到下午五点下班
请假从某一段时间到某一段时间
当请假时间超过下物五点後
时间不计算
所以假如从昨天1:00请到明天8:00
共有16小时
因为八点之後才算上班时间请假
不知道该如何做
还有星期6.日不上班要扣掉
谢谢!
我试过第一种方式用字串比对
不过象10以下会把0省略掉
例如9:07分和08:30比较时
没法比出正常时间
我又试着用全部的时间
扣掉(8:30-开始时间)和(结束时间-17:30)
分成四种情形下去判断
当开始比8:30大和比8:30小
结束比17:30大和结束比17:30小
之间的天数每天扣掉(24-9)小时
可是当开始时间在17:30过後
时间就会计算错误
而星期6.日则又getDay()函数求出星期6或星期天
扣掉当天的9小时
不过又遇到一个问题
当请假时间在星期6或星期天
结束时间在星期6或星期天
算的时间又会错误
我试用先把星期6或星期天请假的时间加9小时回来
再用当天17:30扣掉请假开始时间的数值
在囚出来再用全部时数去扣掉它
不过算出来的时间一直出错
我在想还有另依种方式
用阵列去做
var day[i]=new Date(年,月,日,开始时间)
不过阵列指派不太熟常会出现错误
我想用开始时间跟结束时间求出来後
中间的时间当遇到6.日的话就去掉
可以提供ㄧ下写法吗
谢谢
function show_day() {
if (START_DATE.value=='')
{return false;}
if (END_DATE.value=='')
{return false;}
var date1 = DateUtils.toDate(START_DATE.value).format('yyyymmdd')
a=(date1.substring(4,6))
b=(date1.substring(0,4))
c=(date1.substring(6,8))
var start_time=new Date(b,a-1,c,START_TIME_HOURS.value,START_TIME_MIN.value,00)
var date2 = DateUtils.toDate(END_DATE.value).format('yyyymmdd')
aa=(date2.substring(4,6))
bb=(date2.substring(0,4))
cc=(date2.substring(6,8))
var end_time=new Date(bb,aa-1,cc,END_TIME_HOURS.value,END_TIME_MIN.value,00)
var time_hour_minute
var start_time1=new Date(b,a-1,c,08,30,00)
var end_time1=new Date(bb,aa-1,cc,17,30,00)
if(start_time<=start_time1 && end_time>=end_time1) {
time_hour_minute=(end_time-start_time)-(end_time-end_time1)-(start_time1-start_time)
time_hour_minute1=time_hour_minute
time_hour_minute=time_hour_minute/(1000*60*60)
time_minute=time_hour_minute1-(parseInt(time_hour_minute)*60*60*1000)
time_minute=time_minute/(60*1000)
if(time_hour_minute>24)
time_hour_minute=time_hour_minute-(parseInt((time_hour_minute/24)))*15
}
else if(start_time<=start_time1 && end_time<=end_time1) {
time_hour_minute=(end_time-start_time)-(start_time1-start_time)
time_hour_minute1=time_hour_minute
time_hour_minute=time_hour_minute/(1000*60*60)
time_minute=time_hour_minute1-(parseInt(time_hour_minute)*60*60*1000)
time_minute=time_minute/(60*1000)
if(time_hour_minute>24)
time_hour_minute=time_hour_minute-(parseInt((time_hour_minute/24)))*15
}
else if(start_time>=start_time1 && end_time>=end_time1) {
time_hour_minute=(end_time-start_time)-(end_time-end_time1)
time_hour_minute1=time_hour_minute
time_hour_minute=time_hour_minute/(1000*60*60)
time_minute=time_hour_minute1-(parseInt(time_hour_minute)*60*60*1000)
time_minute=time_minute/(60*1000)
if(time_hour_minute>24)
time_hour_minute=time_hour_minute-(parseInt((time_hour_minute/24)))*15
}
else if(start_time>=start_time1 && end_time<=end_time1){
time_hour_minute=(end_time-start_time)
time_hour_minute1=time_hour_minute
time_hour_minute=time_hour_minute/(1000*60*60)
time_minute=time_hour_minute1-(parseInt(time_hour_minute)*60*60*1000)
time_minute=time_minute/(60*1000)
if(time_hour_minute>24)
time_hour_minute=time_hour_minute-(parseInt((time_hour_minute/24)))*15
}
var i=(start_time.getDate())
var j=(end_time.getDate())
var ii=(start_time.getDay())
var jj=(end_time.getDay())
var start_time_diff_hour=0
var start_time_diff_minute=0
var count_day=0
for(k=i;k<=j;k++){
date=new Date('b','a-1',k)
if(date.getDay()==0 || date.getDay()==6)
count_day+=1
}
time_hour_minute=time_hour_minute-(count_day*9)
var start_time2=new Date(b,a-1,c,17,30,00)
var end_time2=new Date(b,a-1,c,08,30,00)
/* debugger;
if(ii==0||ii==6){
start_time_diff=start_time2-start_time
if(start_time_diff.getHour>=8)
{}
if(start_time_diff.getHour<8)
{
start_time_diff1=start_time_diff
start_time_diff_hour=start_time_diff/(1000*60*60)
start_time_diff_minute=start_time_diff1-(parseInt(start_time_diff_hour)*60*60*1000)
start_time_diff_minute=start_time_diff_minute/(60*1000)
time_hour_minute+=9}
time_hour_minute+=(start_time-start_time1)/(60*60*1000)
time_hour_minute-=start_time_diff_hour
time_minute-=start_time_diff_minute
}
if (jj==0||jj==6){
end_time_diff=end_time-end_time2
end_time_diff1=end_time_diff
end_time_diff_hour=end_time_diff/(1000*60*60)
end_time_diff_minute=end_time_diff1-(parseInt(end_time_diff_hour)*60*60*1000)
end_time_diff_minute=end_time_diff_minute/(60*1000)
time_hour_minute+=9
time_hour_minute-=end_time_diff_hour
time_minute-=end_time_diff_minute
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.227.23.31
1F:→ b12031106:你现在code写到什麽程度 贴出来看看 08/10 00:43
2F:→ minejel:你想的好复杂...不就只要判断每天请假的时间是不是在上班 08/10 01:11
3F:→ minejel:时间内就好了,还去烦恼非上班时间要怎麽扣@@" 08/10 01:11
4F:→ minejel:想的太复杂的话,你可以先用if把所有状态挑出来,慢慢再精练 08/10 01:14
※ 编辑: hannsg830 来自: 61.221.134.110 (08/10 08:38)