求教个时间的算法~~~~~~~~~~~~~

yourantian 2006-06-27 12:40:30
用户输入工作的开始时间和结束时间自动分配加班小时数

时段A 夜里22点----凌晨1点
时段B 凌晨1点-----8点

例如:
开始时间: 2006-6-24 3:00:00 结束时间:2006-6-24 23:00:00

得出结果为:
时段A:1小时
时段B:5小时
其他:14小时



请问如何能自动求出这个结果?恳请大家帮帮忙,谢谢了
...全文
261 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
addwing 2006-06-29
  • 打赏
  • 举报
回复
关注。学习。帮你顶。。。。。。。。。。
李睿_Lee 2006-06-27
  • 打赏
  • 举报
回复
先算两时间段间的天数,得出三个时间段时间,再考虑余下不到一天时间内的三个时间段里的时间,合计下。
addwing 2006-06-27
  • 打赏
  • 举报
回复
关注。。。帮你顶!
「已注销」 2006-06-27
  • 打赏
  • 举报
回复
'说明: 按天循环
'如果是第一天,则从指定的开始,否则起始为0点,如果为最后一天,则从指定的结束,否则为24点
'分段计算每时段的时间并统计
'结果作为一个一维数组返回
'按照时段打印。因为A时段跨越两天,所以作为两个时段来进行统计。加一下就可以了
「已注销」 2006-06-27
  • 打赏
  • 举报
回复
function workAdditionTime (works,worke)
dim resultArr,WorkDay,StartArr,EndArr,i,j,Cs,Ce,ts,te
resultArr=array(0,0,0,0)
StartArr=array(0,1,8,22)
EndArr=array(1,8,22,24)
WorkDay=DateDiff("d",works,worke)
for i=0 to WorkDay
Cs=0:Ce=24
if i=0 then Cs=Hour(works)
if i=WorkDay then Ce=Hour(worke)
for j=0 to ubound(resultarr)
ts=StartArr(j)
te=EndArr(j)
if Cs>=ts then ts=Cs
if Ce<=te then te=Ce
if (ts<te) then resultArr(j)=resultArr(j)+te-ts
next
next
workAdditionTime=resultArr
end function

dim result

result=workAdditionTime ("2006-6-24 3:00:00","2006-6-24 23:00:00")
%>
<div>时段A: <%= result(0)+result(3) %> 小时</div>
<div>时段B: <%= result(1) %> 小时</div>
<div>其他 : <%= result(2) %> 小时</div>
indexroot 2006-06-27
  • 打赏
  • 举报
回复
'自动换行也考进去了 重发一次

Function getOverTime(d1,d2,start,interval)
dim sum
sum=0
For d = day(d1) To day(d2)
currentS=DateAdd("d",d-day(d1),CDate(FormatDateTime(d1,2)&" "&start))
currentE=DateAdd("h",interval,CDate(currentS))
if DateDiff("h",d1,currentS)>=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff("h",d2,currentE)<=0 then
sum=sum+interval
else if DateDiff("h",d1,currentS)<=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff("h",d2,currentE)<=0 then
sum=sum+DateDiff("h",d1,currentE)
else if DateDiff("h",d1,currentS)>=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff("h",d2,currentE)>=0 then
sum=sum+DateDiff("h",currentS,d2)
end if
end if
end if
Next
getOverTime=sum
end Function


Date1 = "2006-6-24 3:00:00"
Date2 = "2006-6-24 23:00:00"


'时段A 夜里22点----凌晨1点
Time_A=getOverTime(Date1,Date2,"22:00:00",3) ' A时段共3小时
Response.Write "时段A:"&Time_A&"<br/>"

'时段B 凌晨1点-----8点
Time_B=getOverTime(Date1,Date2,"1:00:00",7) ' B时段共7小时

Response.Write "时段B:"&Time_B&"<br/>"

'用总长度减去A B时段 求其他
Response.Write "其他:"& (DateDiff("h", Date1,Date2)-Time_A-Time_B)
indexroot 2006-06-27
  • 打赏
  • 举报
回复
'getOverTime函数
'd1 考查的开始时间
'd2 考查的终止时间
'start 时段开始时间
'interval 时段持续时间
indexroot 2006-06-27
  • 打赏
  • 举报
回复


Function getOverTime(d1,d2,start,interval)
dim sum
sum=0
For d = day(d1) To day(d2)
currentS=DateAdd("d",d-day(d1),CDate(FormatDateTime(d1,2)&" "&start))
currentE=DateAdd("h",interval,CDate(currentS))
if DateDiff("h",d1,currentS)>=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff

("h",d2,currentE)<=0 then
sum=sum+interval
else if DateDiff("h",d1,currentS)<=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff

("h",d2,currentE)<=0 then
sum=sum+DateDiff("h",d1,currentE)
else if DateDiff("h",d1,currentS)>=0 and DateDiff("h",d1,currentE)>=0 and DateDiff("h",d2,currentS)<=0 and DateDiff

("h",d2,currentE)>=0 then
sum=sum+DateDiff("h",currentS,d2)
end if
end if
end if
Next
getOverTime=sum
end Function


Date1 = "2006-6-24 3:00:00"
Date2 = "2006-6-24 23:00:00"

'通过start 和interval设定"起效时间"


'时段A 夜里22点----凌晨1点
Time_A=getOverTime(Date1,Date2,"22:00:00",3) ' A时段共3小时
Response.Write "时段A:"&Time_A&"<br/>"

'时段B 凌晨1点-----8点
Time_B=getOverTime(Date1,Date2,"1:00:00",7) ' B时段共7小时

Response.Write "时段B:"&Time_B&"<br/>"

Response.Write "其他:"& (DateDiff("h", Date1,Date2))-Time_A-Time_B
「已注销」 2006-06-27
  • 打赏
  • 举报
回复
晕哪

把你的规则发出来,不要用这种举例的方法~~
jspadmin 2006-06-27
  • 打赏
  • 举报
回复
arr(1)...arr(24)
然后,把时间填入每个元素,在这个时间段的,填1,否则0
最后统计乘以加权
ahhisoft 2006-06-27
  • 打赏
  • 举报
回复
DateDiff("h",开始时间,结束时间)
indexroot 2006-06-27
  • 打赏
  • 举报
回复
Date1 = "2006-6-24 3:00:00"
Date2 = "2006-6-24 23:00:00"
也说一下偶上面程序的思路:

从考察的d1到考察的d2这段时间
与指定start到start+interval时段的交集

例如求时段A
getOverTime(Date1,Date2,"22:00:00",3)

算法实现的是
工作的开始时间Date1(2006-6-24 3:00:00)到结束时间Date2(2006-6-24 23:00:00)
与
每天时段22:00:00到22:00:00其后3小时也就是22:00:00到次日凌晨1:00:00
的交集

28,402

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧