[ajax]請問計算時數問題
到下午五點下班
請假從某一段時間到某一段時間
當請假時間超過下物五點後
時間不計算
所以假如從昨天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
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
08/10 01:14, 4F
※ 編輯: hannsg830 來自: 61.221.134.110 (08/10 08:38)