[ajax]請問計算時數問題

看板Ajax作者 (冰)時間11年前 (2012/08/09 22:11), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串1/1
到下午五點下班 請假從某一段時間到某一段時間 當請假時間超過下物五點後 時間不計算 所以假如從昨天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

08/10 00:43, , 1F
你現在code寫到什麼程度 貼出來看看
08/10 00:43, 1F

08/10 01:11, , 2F
你想的好複雜...不就只要判斷每天請假的時間是不是在上班
08/10 01:11, 2F

08/10 01:11, , 3F
時間內就好了,還去煩惱非上班時間要怎麼扣@@"
08/10 01:11, 3F

08/10 01:14, , 4F
想的太複雜的話,你可以先用if把所有狀態挑出來,慢慢再精練
08/10 01:14, 4F
※ 編輯: hannsg830 來自: 61.221.134.110 (08/10 08:38)
文章代碼(AID): #1G8yKkFQ (Ajax)